当前位置: 首页 > 知识库问答 >
问题:

在计算总数之前先进行四舍五入

洪璞瑜
2023-03-14

我使用的是WooCommerce 3.0版,还有一个按用户角色定价的插件,它可以提供价格%的折扣。

我们店里有一件商品价值89.55英镑。加上30%的折扣,这将成为62.685英镑。如果您订购6,则价值为376.11英镑。

最后的数字是正确的。

但是,由于我将WC设置设置为2dp,商品价格显示为62.69英镑。因此,发票不正确,显示为62.69英镑x 6=376.11英镑。

我考虑过使用woocommerce\u来计算\u总数,如下所示:

在WooCommerce 3.0中,动态购物车项目定价不适用于订单

我的代码是:

add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1);
function adding_custom_price( $cart_obj ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

 foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
     $new_price = round($cart_item['data']->price,2,PHP_ROUND_HALF_UP);
     $cart_item['data']->set_price($new_price);
     #echo $new_price;
 }

}

echo$new_价格的输出为62.69。但似乎set_价格不起作用,因为购物车中的值仍然显示为62.685。

例如,如果我做62.69x2,小计是125.37。

知道为什么set_price不起作用吗?我看到了这个:

Woocommerce:$cart_商品['data']-

但是上面的答案也不起作用。

非常感谢您的帮助。

共有1个答案

叶鹭洋
2023-03-14

首先,您需要使用WC\u Product方法get\u price()因为$cart\u item['data']WC\u Simple\u Product的一个实例。

此外,您还必须小心,因为购物车中显示的价格已经被WooCommerce特定的格式功能四舍五入。

因此,WC 3.0的功能代码为:

add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1);
function adding_custom_price( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    foreach ( $cart->get_cart() as $cart_item ) {
        $product_price = $cart_item['data']->get_price(); // get the price
        $rounded_price = round( $product_price, 2, PHP_ROUND_HALF_UP );
        $cart_item['data']->set_price(floatval($rounded_price));
    }
}

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

您可以通过在产品价格(购物车项目)中添加一个非常小的浮点数来检查(测试)。您将看到购物车价格真的更新了,例如在函数中替换:

$cart_item['data']->set_price( floatval( $rounded_price ) );

通过

$cart_item['data']->set_price( floatval( $rounded_price + 0.2 ) );
 类似资料:
  • 本文向大家介绍javascript进行四舍五入方法汇总,包括了javascript进行四舍五入方法汇总的使用技巧和注意事项,需要的朋友参考一下 原生 javascript 中四舍五入的函数 toFixed(n) , n为要保留的小数位数。 (0<= n <=20) http://jsfiddle.net/14x0vhu6/ 输出值不是预想的1.0999,而是  1.0999000000000000

  • 问题内容: 我怎么总是将a舍入为一个,而不舍入它。我知道,但是我希望它总是四舍五入。因此,如果为,则四舍五入为4。 问题答案: 您可以使用方法。 请参阅JavaDoc链接:https ://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double ) 从文档: 细胞 返回大于或等于自变量且等于数学整数的最小(最接近负无穷大

  • 本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。 ROUND()函数的行为取决于其参量是准确的还是近似的: ·对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负

  • 问题 你想对浮点数执行指定精度的舍入运算。 解决方案 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可。比如: >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-1.27, 1) -1.3 >>> round(1.25361,3) 1.254 >>> 当一个值刚好在两个边界的中间的时候, round

  • 问题是,每当我使用“System.out.printf(”%.2F\n“,BMI)”时,输出将四舍五入,而不是切断小数点的其余部分。下面是我的代码: