1.7中的四舍五入问题状态如何?


27

我们正在使用Magento CE 1.7,并且存在各种舍入问题。在各种计算中,存在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 2013年

1
“以4 dec。点输入”是什么意思?但是,Magento舍入可以使用12月2日。点。另外,我认为PayPal界面适用于12月2日。要点-这似乎是问题开始的地方。
亚历克斯

如果我没记错的话,如果您在admin中以4个小数点输入价格,它将以4个小数点保存在db中。然后在输出过程中将其舍入到2点,但是舍入是正确的,因为将舍入4位小数点的价格。
user487772 2013年

可以-但是我们主要在总计算上遇到问题,尤其是当涉及基于百分比的优惠券代码时。
亚历克斯

哦,那我的意思错了。抱歉。
user487772 2013年

Answers:


10

我们知道核心Magento税收模块中的一些舍入问题,其中涉及已描述的方案。目前,我们正在为即将发布的1.13版本处理这些问题。这些舍入问题触发了简单的Paypal检查,该检查确定购物车中的订单项是否正确加总。看起来Fabian的补丁程序会在短期内处理Paypal支票。

如果您对我们如何改善Magento Tax模块有任何疑问,意见或建议,请立即与我联系,因为我是负责税收的产品经理。

问候,查克


大!是否有某种测试套件可以显示要解决的问题?
亚历克斯

1
Chuck,您介意设置您的用户信息以进行验证吗?
benmarks

测试仅是内部的。至于已知四舍五入问题的更多细节,这有点有趣。客户将使用特定的价格,税率,折扣等组合将它们视为与某些税收配置相关联。我们针对1.13的方法是识别常见的税收配置,并确保#组合不会在数学上产生舍入错误并标记某些配置(小拐角处)应避免的危险配置。
Chuck

有点题外话,但这是否意味着还会有CE 1.8版本?
谢尔盖·古克

是-CE发布滞后EE发布约一个月。1.13是下一个EE版本。
Chuck

7

感谢Andreas Vogt,我构建了一个模块来修复Paypal回合错误。Andreas给了我一些核心被黑文件,然后我制作了该模块。它检查总和是否正确,如果不正确,则将其更正。

Afaik的核心技术已经在野外进行了测试。很多人都要求使用该模块,但是无论如何它都没有给我反馈。但这是经过单元测试的!(只有重写工作有效,因为我不知道贝宝的问题是什么;-))

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


1
嗯..它确切地修复了哪个错误?看起来像购物车行项目转移错误。实际上,我们已经关闭了购物车转移。并与4位舍入补丁一起使用吗?
亚历克斯

有不止一个问题吗?正如我说的,我不知道它到底能解决什么-如果有多个问题:(
Fabian Blechschmidt

5

我们同时面临贝宝四舍五入错误和带有100%折扣优惠券代码的问题。我们只在价格上有问题(例如3,99欧元含税),其中净价格的第3位数字为5(3,325)。因此,税(此处为20%)的第三位数也为5(0,665)。因此,如果您四舍五入并加上两个价格(贝宝和magento所做的事情),则总价比基本价格(4,00欧元)高0.01欧元。

正确的计算应为Eur 3,32欧元+ Eur 0,67税= Eur 3,99

由于我们也在尝试寻找一种通用的解决方案,因此我们尝试一下贝宝四舍五入修复!


太好了,告诉我您是否有问题,我很乐意提供帮助,并在野外查看Bugfix,并在需要时进行调试!
Fabian Blechschmidt

1
仅供参考,您所描述的问题已在我们即将发布的版本(1.8 CE / 1.13 EE)中修复。
Chuck

@Chuck我刚刚从1.13.0.1开始使用Mage_Tax_Model_Sales_Total_Quote_Tax测试了这种情况,它确实已解决了该问题,可作为1.12项目中的替代产品。非常感谢。是否有1.8CE的预计到达时间?
乔纳森·戴

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)总计=>税收/折扣=>总计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位数,并且您必须使用无分数数字的汇率。示例:总计: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是精度,则y必须小于a + 2。

请注意,如果您处理数量。该错误将成倍增加。因此,如果最大值为10 ^ 5,则必须具有7的精度。这仅是担心,如果要使用偏移量计算!

附加(9.10.2013 Magento版本1.7.0.2)Brutto <=> Netto和Taxes // America <=> old Europe Sets是整数(Cents),并且映射
f(x)= round(a * x)a> 1是不是双射的。用我的话说:不是每个价格都包含在内。存在价格排除。或有时包括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

在美国-Netto土地没有价格19,95。

因此,请尽可能以原始价格计算。要包括价格,请使用输入的价格和税金(实数)。

贝宝(PayPal)拥有这张欺诈支票-现在我不确定-但贝宝(PayPal)只是添加了magento给它的号码。请参阅http://fabiankrueger.de/blog/magento-und-paypayl-rundungsfehler/ 如果情况并非如此,并且PayPal重新计算Tax或Total,则此问题无法解决,否则价格-错误或正确-之前已在Magento中显示。在那儿解决。对我来说,它似乎有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.