首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高WooCommerce税收计算精度,并保持两个小数位数显示的价格

提高WooCommerce税收计算精度,并保持两个小数位数显示的价格
EN

Stack Overflow用户
提问于 2021-02-13 08:26:12
回答 2查看 838关注 0票数 2

在Woocommerce的设置中,我设置了6个小数点,以获得更准确的税收计算。然而,我需要所有的价格和金额显示,只有两个小数在前面,电子邮件等。我发现了两个功能。

代码语言:javascript
复制
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;
}

它们之间有什么区别,我应该使用哪一种呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-13 14:49:05

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

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

税收计算精度基于wc_get_rounding_precision() core functionWC_Tax Class中的应用

代码语言:javascript
复制
function wc_get_rounding_precision() {
    $precision = wc_get_price_decimals() + 2;
    if ( absint( WC_ROUNDING_PRECISION ) > $precision ) {
        $precision = absint( WC_ROUNDING_PRECISION );
    }
    return $precision;
}

如您所见,如果WC_ROUNDING_PRECISION常数显示的价格小数点值+ 2小于WC_ROUNDING_PRECISION常量,则优先排序。但是,由于你想让显示的价格保持2个小数位数,这就需要一些其他的东西。

所以你不应该增加显示的价格小数,而不使用wc_price_args或/和wc_get_price_decimals挂钩,以提高税收计算的准确性。

如果6个小数的精度不够,并且您想获得更高的精度:

怎样才能更精确地计算税收?

最好的方法是编辑WordPress wp_config.php文件并添加以下行(您可以根据自己的意愿增加WC_ROUNDING_PRECISION常量值,这里的值设置为8 ),这样才能更精确地计算税收,并保持显示价格为2小数位数。

代码语言:javascript
复制
// Change WooCommerce rounding precision
define('WC_ROUNDING_PRECISION', 8);

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

票数 3
EN

Stack Overflow用户

发布于 2021-02-13 08:40:24

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

我没有测试这个,但它应该能胜任这项工作。

代码语言:javascript
复制
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格式。

如果这对你有用的话请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66183179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档