我使用的是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']-
但是上面的答案也不起作用。
非常感谢您的帮助。
首先,您需要使用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)”时,输出将四舍五入,而不是切断小数点的其余部分。下面是我的代码: