我在Wordpress 4.8.3上的WooCommerce 3.2.3中对税收等级的舍入有问题 .
当在购物车和结账页面中显示时,两个税级中的每一个的总和都正确显示,带有2个小数点 .
但是,在计算购物车总额时,税收等级总和将使用4个小数点值在税小计总和中加在一起,然后向上舍入 .
这可能会导致0.01舍入错误,如下例所示,如果您将项目小计与显示的税级类别相加,则得到 221,61 € ,而不是显示的221,62€ .
示例(价格不含税,不涉及运输):
产品XXX(属于19%的税级):161,28€
产品YYY(属于7%税级):27,75€
产品项目小计= 189,03 €
MWST . 19%30,64€
MWST . 7%1,94€
购物车总额: 221,62 €
问题:
如果将WooCommerce加在一起计算购物车总金额,我怎么能强制WooCommerce使用2个小数点作为税级?
Build :
-
我们使用插件"woocommerce germanized"版本1.9.5 . 存在和不启用它时存在问题 .
-
我们使用运费计算器插件,问题存在与否 .
-
禁用所有插件无效 .
-
测试了二十七个主题,结果相同 .
-
该商店在德国,并出售给公司和私人客户,因此价格是免税的 .
-
产品与19%或7%的税级相关联 .
-
货币是EUR,使用2位小数 .
-
"display tax totals"设置设为"itemized" .
-
价格不含税 .
-
价格显示不含税 .
我理解在计算中使用4dp精度的原因,但在我们的用例中不需要它 .
我在WC代码中添加了一些调试输出,并看到上面示例中的各个税类总和存储了4个小数:
MWST . 19%30,6432
MWST . 7%1,9425
此处的税小计为32,5857,在购物车总计算期间向上舍入为 32,59 € ,与 32,58 € 相反,导致0,01差异 .
在我寻找这个问题的解决方案时,我发现了很多不同的税收计算问题,但没有完全相似的用例 .
我试图修改WooCommerce代码,但是我在WooCommerce找不到合适的位置是不成功的,我可以设置/硬编码精度计算使用2dp而不是4dp,但这可能不是最理想的解决方案 .
注意:如果我将"display tax total"设置更改为"Total"而不是"Itemized",则显示的税额小计为 32,59 € .
在此设置中,总购物车总额221,62€等于列出的小计的总和,但客户要求税项显示为逐项列出 .
很抱歉有很长的描述 . 在我最近的经验中,为了正确解释与税收计算相关的问题,似乎是必要的 .
有没有人有建议解决这个问题?
非常感谢您的建议和时间!
Muskat
1 回答
首先,你必须搜索如何在Woocommerce中计算税收...如果你进入WooCommerce WC_Cart类代码, you will see that WC_Tax class is responsible for this…
在源代码WC_Tax中进行计算的方法是(使用相应的可用过滤器挂钩 to alter that calculations ):
calc_tax(),可用过滤器挂钩 woocommerce_calc_tax .
calc_shipping_tax(),可用过滤器挂钩 woocommerce_calc_shipping_tax .
round(),可用过滤器挂钩 woocommerce_tax_round .
calc_inclusive_tax(),可用过滤器挂钩 woocommerce_price_inc_tax_amount .
calc_exclusive_tax(),可用过滤器挂钩 woocommerce_price_ex_tax_amount .
可能还有其他一些......
以下是更改round()行为 to return rounding to .5 cents 的示例:
代码位于活动子主题或活动主题(或任何插件文件)的function.php文件中 .
由于您的问题非常具体且难以重现,您将不得不找到哪个钩子可以解决您的问题...