在woocommerce中拥有多个税级时的税务四舍五入问题

时间:2017-11-12 17:59:54

标签: php wordpress woocommerce rounding-error tax

我在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个小数点作为税级?

设定:

  • 我们使用插件“woocommerce germanized”版本1.9.5。无论是否启用,都存在问题。
  • 我们使用运费计算器插件,无论是否存在问题都存在。
  • 禁用所有插件无效。
  • 测试了二十七个主题,结果相同。
  • 该商店位于德国,并向公司和私人客户销售,因此价格不含税。
  • 产品与19%或7%的税级有关。
  • 货币是EUR,使用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

1 个答案:

答案 0 :(得分:1)

首先,您必须搜索在Woocommerce中计算税额的方式......如果您使用WooCommerce WC_Cart类代码,您会看到 WC_Tax 班级负责此事......

在源代码WC_Tax中,进行计算的方法是(使用相应的可用过滤器钩子来改变计算

以下是更改round()行为以将回合舍入为.5美分的示例:

add_filter( 'woocommerce_tax_round', 'euro_5cent_rounding' );
function euro_5cent_rounding( $in ) {
    return round( $in / 5, 2 ) * 5;
}

代码放在活动子主题或活动主题(或任何插件文件)的function.php文件中。

由于您的问题非常具体且难以复制,您必须找到解决问题的方法......