首页 文章

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

提问于
浏览
1

我在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 回答

  • 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 的示例:

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

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

    由于您的问题非常具体且难以重现,您将不得不找到哪个钩子可以解决您的问题...

相关问题