我在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个小数点作为税级?
设定:
我理解在计算中使用4dp精度的原因,但在我们的用例中并不需要。
我在WC代码中添加了一些调试输出,并看到上例中的各个税级总和存储有4位小数:
MWST。 19%30,6432
MWST。 7%1,9425
此处的税金小计为32,5857,在购物车总计算期间向上舍入为 32,59€,而不是 32,58€,导致< em> 0,01差异。
在我寻找这个问题的解决方案时,我发现了很多不同的税务计算问题,但没有完全相似的用例。
我试图修改WooCommerce代码,但是我没有成功找到WooCommerce中的正确位置,我可以设置/硬编码精度计算使用2dp而不是4dp,但这可能不是最多无论如何,理想的解决方案。
注意:如果我将“显示税总额”设置更改为“总计”而不是“已分项”,则显示的税额小计 32,59€。
在此设置中,总购物车总额221,62€等于所列小计的总和,但客户要求将税项逐项列出。
很抱歉这么长的说明。在我最近的经验中,为了正确解释与税收计算相关的问题,似乎是必要的。
有人有建议解决此问题吗?
非常感谢您的建议和时间!
Muskat
答案 0 :(得分:1)
首先,您必须搜索在Woocommerce中计算税额的方式......如果您使用WooCommerce WC_Cart
类代码,您会看到 WC_Tax
班级负责此事......
在源代码WC_Tax
中,进行计算的方法是(使用相应的可用过滤器钩子来改变计算):
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()
行为以将回合舍入为.5
美分的示例:
add_filter( 'woocommerce_tax_round', 'euro_5cent_rounding' );
function euro_5cent_rounding( $in ) {
return round( $in / 5, 2 ) * 5;
}
代码放在活动子主题或活动主题(或任何插件文件)的function.php文件中。
由于您的问题非常具体且难以复制,您必须找到解决问题的方法......