สถานะของปัญหาการปัดเศษใน 1.7 คืออะไร?


27

เราใช้ Magento CE 1.7 และมีปัญหาการปัดเศษที่หลากหลาย ในการคำนวณต่างๆมีความแตกต่าง EUR 0,01

ปัญหาพื้นฐานอาจเป็นไปได้ว่าราคาบทความรวมอยู่ด้วย ภาษี.

โปรแกรมเมอร์ร่วมเขียนทับMage_Core_Model_Store::roundPrice()วิธีการคำนวณด้วยความแม่นยำ 4 หลัก แต่ดูเหมือนว่าจะทำให้เกิดปัญหากับการชำระเงินด้วย PayPal

มีวิธีแก้ไขปัญหาเหล่านั้นหรือไม่?

แก้ไข:

เราพยายามจริงแพทช์หลักอย่างเป็นทางการซึ่งโดยทั่วไปเพิ่ม 4 หลักปัดเศษ\Mage_Tax_Model_Sales_Total_Quote_Shipping::_round, \Mage_Tax_Model_Sales_Total_Quote_Subtotal::_deltaRoundและ\Mage_Tax_Model_Sales_Total_Quote_Tax::_deltaRoundซึ่งการแก้ไขคูปองปัดเศษปัญหา แต่ไม่ได้เป็นปัญหาของ PayPal


เท่าที่ฉันจำได้ Magento เก็บราคาด้วย 4 จุดทศนิยม ดังนั้นหากราคาถูกป้อนด้วยทศนิยม 4 ตำแหน่งการคำนวณนั้นถูกต้อง แต่ฉันอาจจะผิด
user487772

1
คุณหมายถึงอะไรโดย "อินพุทที่มี 4 ธ.ค. คะแนน"? แต่การปัดเศษของวีโอไอพีนั้นใช้ได้กับ 2 ธ.ค. จุด นอกจากนี้ฉันคิดว่าส่วนต่อประสาน PayPal ใช้งานได้กับ 2 ธ.ค. คะแนน - ดูเหมือนว่าปัญหานี้จะเริ่มต้นที่ใด
Alex

ถ้าฉันจำได้ถูกต้องถ้าคุณป้อนราคาในผู้ดูแลระบบด้วยทศนิยม 4 ตำแหน่งจะถูกบันทึกใน db ด้วยทศนิยม 4 ตำแหน่ง จากนั้นจะถูกปัดเศษเป็น 2 จุดระหว่างผลลัพธ์ แต่การปัดเศษจะถูกต้องเนื่องจากราคาที่มีทศนิยม 4 ตำแหน่งจะถูกปัดเศษ
user487772

แน่นอน - แต่เราส่วนใหญ่มีปัญหากับการคำนวณทั้งหมดโดยเฉพาะอย่างยิ่งถ้าเกี่ยวข้องกับรหัสคูปองตามเปอร์เซ็นต์
อเล็กซ์

โอ้ฉันผิดคำถามของคุณ ขอโทษ
user487772

คำตอบ:


10

เราตระหนักถึงปัญหาการปัดเศษหลายครั้งในโมดูลภาษีหลักของวีโอไอพีที่ครอบคลุมสถานการณ์ที่อธิบายไว้ ปัจจุบันเรากำลังดำเนินการแก้ไขปัญหาสำหรับการเปิดตัว 1.13 ที่กำลังจะมาถึง ปัญหาการปัดเศษเหล่านั้นทำให้เกิดการตรวจสอบ Paypal อย่างง่าย ๆ ซึ่งกำหนดว่ารายการในตะกร้าสินค้าถูกต้องหรือไม่ ดูเหมือนว่าแพทช์ของ Fabian จะดูแลการตรวจสอบ Paypal ในระยะสั้น

หากคุณมีคำถามความคิดเห็นหรือข้อเสนอแนะเกี่ยวกับวิธีที่เราสามารถปรับปรุงโมดูลภาษีวีโอไอพีได้โปรดอย่าลังเลที่จะติดต่อฉันเพราะฉันเป็นผู้จัดการผลิตภัณฑ์ที่รับผิดชอบเรื่องภาษี

ขอแสดงความนับถือชัค


ที่ดี! มีชุดทดสอบประเภทใดบ้างที่จะแสดงว่าปัญหาใดบ้างที่จะถูกจัดการ?
อเล็กซ์

1
โยนคุณจะตั้งค่าข้อมูลผู้ใช้ของคุณเพื่อยืนยันหรือไม่
benmarks

การทดสอบภายในเท่านั้น เท่าที่มีรายละเอียดเพิ่มเติมเกี่ยวกับปัญหาการปัดเศษที่ทราบแล้ว - มันน่าสนใจนิดหน่อย ลูกค้าจะเห็นว่าพวกเขามีความเกี่ยวข้องกับการกำหนดค่าภาษีบางอย่างโดยใช้การรวมกันเฉพาะของราคาอัตราภาษีส่วนลด ฯลฯ วิธีการของเราสำหรับ 1.13 คือการระบุการกำหนดค่าภาษีทั่วไปและตรวจสอบให้แน่ใจว่าชุดค่าผสม การกำหนดค่า (กรณีมุมเล็ก ๆ ) เป็นการกำหนดค่าอันตรายที่ควรหลีกเลี่ยง
Chuck

ปิดหัวข้อเล็กน้อย แต่มันหมายความว่าจะมีรุ่น CE 1.8 หรือไม่
Sergei Guk

ใช่ - CE ออกรุ่นล่าช้า EE ประมาณหนึ่งเดือน 1.13 เป็นรุ่นต่อไปของ EE
Chuck

7

ขอบคุณ Andreas Vogt ฉันสร้างโมดูลเพื่อแก้ไขข้อผิดพลาดในรอบ Paypal Andreas ให้ไฟล์แฮ็คหลักสองสามไฟล์กับฉันและฉันสร้างโมดูลขึ้นมา มันตรวจสอบว่าผลรวมถูกต้องหรือไม่ถ้าไม่ถูกต้อง

Afaik แฮ็คหลักได้รับการทดสอบในป่า ผู้คนจำนวนมากถามถึงโมดูล แต่ไม่มีใครให้คำติชมกับฉันได้ แต่มันเป็นหน่วยทดสอบ! (เฉพาะการเขียนใหม่เท่านั้นที่ทำงานได้เพราะฉันไม่รู้ว่าปัญหา paypal คืออะไร ;-))

https://github.com/magento-hackathon/PaypalRoundBugfix


1
หืมม. ข้อผิดพลาดอันไหนที่แก้ไขได้อย่างแน่นอน? ดูเหมือนว่าข้อผิดพลาดการถ่ายโอนรายการรถเข็นรายการ จริงๆแล้วเราได้ปิดการโอนรถเข็น และจะใช้กับแพทช์การปัดเศษ 4 หลักหรือไม่
อเล็กซ์

มีปัญหามากกว่าหนึ่งข้อหรือไม่? อย่างที่ฉันบอกไปฉันไม่รู้ว่ามันแก้ไขอะไร - ถ้ามีปัญหามากกว่าหนึ่งปัญหา :(
Fabian Blechschmidt

5

เรากำลังเผชิญทั้งข้อผิดพลาดในการปัดเศษ paypal และปัญหาเกี่ยวกับรหัสคูปองส่วนลด 100% เรามีปัญหาเกี่ยวกับราคาเท่านั้น (เช่น Eur 3,99 รวมภาษี) ซึ่งราคาสุทธิมีตัวเลข 3 ตัวเป็น 5 (3,325) ดังนั้นภาษี (ที่นี่ด้วย 20%) ก็มีตัวที่ 3 และ 5 (0,665) ดังนั้นถ้าคุณปัดเศษและเพิ่มทั้งสองราคา (เพย์พาลและวีโอไอพีทำอะไร) ผลรวมคือ Eur 0,01 มากกว่าราคาพื้นฐาน (Eur 4,00)

การคำนวณที่เหมาะสมควรอยู่ที่ 3,32 ยูโรสุทธิ + Eur 0,67 ภาษี = Eur 3,99

ในขณะที่เรากำลังพยายามหาวิธีแก้ไขปัญหาทั่วไปเราจะลองแก้ไขปัญหาการปัดเศษ paypal!


ดีมากบอกฉันว่าคุณมีปัญหาหรือไม่ฉันอยากช่วยและดู Bugfix อย่างรวดเร็วและดีบั๊กหากจำเป็น!
Fabian Blechschmidt

1
FYI ปัญหาที่คุณอธิบายได้รับการแก้ไขในรุ่นถัดไปของเรา (1.8 CE / 1.13 EE)
Chuck

@ ชัคฉันเพิ่งทดสอบสถานการณ์นี้กับ Mage_Tax_Model_Sales_Total_Quote_Tax จาก 1.13.0.1 และดูเหมือนว่าจะสามารถแก้ไขปัญหาได้เนื่องจากเป็นการแทนที่แบบดรอปในโครงการ 1.12 ขอบคุณมาก ๆ. มี ETA สำหรับ 1.8CE หรือยัง
Jonathan Day

4

มีความสัมพันธ์ทั่วไประหว่างราคาปริมาณส่วนลดภาษีและการกำหนดของพวกเขา

Assume:
x is the price
y is the percentage
s is the rounded sub-total

2 Directions
A) incl. Tax => excl. Tax => incl. Tax
B) excl. => incl. => excl.

ปัญหาที่สำคัญคือผลรวมย่อยที่ปัดเศษซึ่งฉันคำนวณด้วยค่าสูงสุด ความผิดพลาด ตัวเลข 2 หลักหมายถึง 5 * 10 ^ -3

A) x * 10 ^ 2 / (y + 10 ^ 2) // s * (y + 10 ^ 2) / 10 ^ 2

B) x * (y + 10 ^ 2) / 10 ^ 2 // s * 10 ^ 2 / (10 ^ 2 + y)

A)
Subtotal precision 2 fractional digits:
5*10^-3*(y+10^2)/10^2 => (y+10^2)/10^2<1 => no y
3 fractional digits:
5*10^-4*(y+10^2)/10^2 => (y+10^2)/10^2<10 => y<900
4 fractional digits:
5*10^-5*(y+10^2)/10^2 => (y+10^2)/10^2<10^2 => y<90900
(must be a very bad country)

......

B)
Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/(10^2+y) => 10^2/(10^2+y)&lt;1 => every y

หากคุณต้องการคำนวณด้วยส่วนลดหรือภาษีและต้องการคำนวณราคาคำอธิบายถัดไปน่าสนใจสำหรับคุณ โปรดระวังเพราะฉันไม่ทราบว่ากรณีใด ๆ ในส่วนหน้าเป็นไปได้ที่จะมีการคำนวณฝึกงาน A) Total => ภาษี / ส่วนลด => ผลรวม B) ภาษี / ส่วนลด => ผลรวม => ภาษี / ส่วนลด

A) x * y / 10 ^ 2 // s * 10 ^ 2 / y

B) x * 10 ^ 2 / y // s * y / 10 ^ 2

A) Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/y => 10^2/y < 1 => y>10^2
Subtotal precision 3 fractional digits:
(5*10^-4)*10^2/y => 10^2/y < 10 => y>10
Subtotal precision 4 fractional digits:
... 10^2/y < 10^2 => y>1

ด้วยความแม่นยำของตัวเลข 2 หลักคุณจะต้องมีอัตราด้วย NO FRACTIONAL DIGITS ตัวอย่าง: ทั้งหมด: 15,15 อัตราภาษี: 0,3% => ภาษี 0,04545 => ปัดเศษ 0,0455 ภาษี: 0,0455 => รวม: 15,17

B) Subtotal precision 2 fractional digits:
(5*10^-3)*y/10^2 => y/10^2 &lt; 1 => y < 10^2

ถ้า a คือความแม่นยำมากกว่าต้องน้อยกว่า + 2

โปรดทราบหากคุณจัดการกับปริมาณ ข้อผิดพลาดจะถูกคูณ ดังนั้นถ้าคุณมีค่าสูงสุด 10 ^ 5 คุณจะต้องมีความแม่นยำเท่ากับ 7 นี่เป็นเรื่องน่ากังวลเท่านั้นหากคุณคำนวณออฟเซ็ต!

เพิ่มเติม (9.10.2013 Magento เวอร์ชั่น 1.7.0.2) Brutto <=> Netto และ Taxes // America <=> Europe Europe ชุดเก่าเป็นจำนวนเต็ม (Cents) และการทำแผนที่
f (x) = round (a * x) a> 1 คือ ไม่ Bijective ในคำพูดของฉัน: ไม่ได้สำหรับทุกราคารวม มีราคาเพิ่มขึ้น หรือบางครั้งมี 2 ราคารวม สำหรับราคาเดียวไม่รวม หรือคุณสามารถรับผลลัพธ์ที่แตกต่างกัน 2 แบบขึ้นอยู่กับวิธีคำนวณ

ตัวอย่างโลกแห่งความจริงจากประเทศเยอรมนี:

คุณพยายามป้อนราคารวม ภาษี: 19,95 คุณจะได้รับ 16,76 (2 หลัก) ตามราคาของคุณไม่รวม ภาษี (19%) หากคุณคำนวณภาษี 19% คุณจะได้รับ (16,76 * 0.19) 3,18 (ระวัง: 19.95 * 019 / 1.19 ~ 3.19)

ดังนั้นจึงมีความแตกต่าง 1 เซ็นต์ 16,76 => 19.94 16.77 => 19.96

ไม่มีราคา 19,95 ในอเมริกา - ดินแดนแห่ง netto

ดังนั้นจงคำนวณด้วยราคาดั้งเดิมเท่าที่จะทำได้ สำหรับการรวมราคาใช้ราคาที่ป้อนและภาษี

PayPal มีการตรวจสอบการฉ้อโกง - ตอนนี้ฉันไม่แน่ใจ - แต่ PayPal เพิ่งเพิ่มหมายเลขที่วีโอไอพีให้ ดูhttp://fabiankrueger.de/blog/magento-und-paypayl-rundungsfehler/ หากนี่ไม่เป็นความจริงและ PayPal คำนวณภาษีหรือยอดรวมใหม่ปัญหานี้ไม่สามารถแก้ไขได้แสดงใน Magento . แก้มันที่นั่น สำหรับฉันดูเหมือนว่าจะทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.