提高 WooCommerce 税收计算精度并保持显示的价格保留两位小数 如何更精确地计算税收?

问题描述

在 Woocommerce 设置中,我设置了 6 位小数,以便获得更准确的税收计算。但是,我需要在前端、电子邮件等中仅显示 2 位小数的所有价格和金额。我发现了两个功能

add_filter('wc_price_args','custom_decimals_price_args',10,1);
function custom_decimals_price_args($args) {
$args['decimals'] = 2;
return $args;
}

add_filter( 'wc_get_price_decimals','change_prices_decimals',20,1 );
function change_prices_decimals( $decimals ){
$decimals = 2;
return $decimals;
}

这些和我应该使用哪个有什么区别?

解决方法

请注意,WC_Woocommerce define_constants() method 中的 WC_ROUNDING_PRECISION 常量设置为 6

这意味着 WooCommerce Tax 计算精度已经设置为 6 位小数。

税收计算精度基于wc_get_rounding_precision() core function中使用的WC_Tax Class

function wc_get_rounding_precision() {
    $precision = wc_get_price_decimals() + 2;
    if ( absint( WC_ROUNDING_PRECISION ) > $precision ) {
        $precision = absint( WC_ROUNDING_PRECISION );
    }
    return $precision;
}

如您所见,如果显示的价格十进制值 + 2 小于 WC_ROUNDING_PRECISION 常量,则优先考虑 WC_ROUNDING_PRECISION 常量。但是,由于您希望显示价格保留两位小数,这需要其他一些东西。

因此,您不应增加显示的价格小数位数,也不应使用 wc_price_args 或/和 wc_get_price_decimals 挂钩来提高税收计算的精度。

如果6位小数的精度不够而您想获得更高的精度:

如何更精确地计算税收?

获得更精确的税收计算并保持显示的价格保留 2 位小数的最佳方法是编辑 WordPress wp_config.php 文件并添加以下行 (您可以在其中增加 WC_ROUNDING_PRECISION 常量值例如,这里的值设置为 8

// Change WooCommerce rounding precision
define('WC_ROUNDING_PRECISION',8);

这将改变 WC_ROUNDING_PRECISION 常数而不影响显示的价格小数。

,

wc_price_args 用于向价格添加额外参数 - 它接受原始价格,并且可以向其中添加其他内容,例如货币符号。当 get_price 被调用时,它会在前端包含这个货币符号。 https://wp-kama.com/plugin/woocommerce/hook/wc_price_args

wc_get_price_decimals 它在“点”之后设置一些小数 - 例如。如果您将其设置为 5,则价格将看起来像 0.00000 https://wp-kama.com/plugin/woocommerce/function/wc_get_price_decimals

我没有测试这个,但它应该可以完成工作。

add_filter('wc_price_args','custom_decimals_price_args',10,1);
function custom_decimals_price_args($price,$args) {
  
  return number_format((float)$price,2,'.','');

}

或者,您可以编辑产品所在的模板,并使用上面的 get_price 格式化 number_format

如果这对您有用,请告诉我。