Woocommerce价格计算中的四舍五入问题

时间:2018-07-21 16:57:03

标签: php wordpress woocommerce rounding discounts

尝试在Woocommerce中进行一些计算时遇到问题,好像我遇到了浮点精度错误。即:我的总和是448.99,但实际上我需要我的总和是449.00。

让我们看看我如何进行此计算:

首先,我将当前所选变体的价格保存在数组中

$regular_price_array[$variation_key] = (float)get_post_meta($selected_variation_ids[$variation_key]['variation_id'], '_regular_price', true);

结果:

array(6) { [64]=> float(74) [65]=> float(99) [66]=> float(89) [67]=> float(89) [68]=> float(59) [69]=> float(149) }

然后,我将折扣保存在一个数组中:

$variation_discount_array[$discount_key] = (float)$selected_variation_ids[$discount_key]['discount'];

结果:

array(6) { [0]=> float(19.66) [1]=> float(19.68) [2]=> float(19.68) [3]=> float(19.68) [4]=> float(19.68) [5]=> float(19.68) }

然后,我尝试对PRICE *(1-DISCOUNT / 100)进行基本计算,然后将这些价格加起来。由于我认为PHP的浮点精度,这就是问题发生的地方。

$discount_variation_price[$innerKey] = $reg_prices * number_format((1 - $discount/100),4);

结果:

array(6) { [64]=> float(59.4368) [65]=> float(79.5168) [66]=> float(71.4848) [67]=> float(71.4848) [68]=> float(47.3888) [69]=> float(119.6768) } 

如果您只是在第一个数学题上自己做数学,就会发现问题。您最终会得到〜59.45(弥补了最后一分钱),但是当然,它不仅会那样工作。

我尝试使用bcmath(),但是在安装过程中出现一个错误,提示该函数未定义并且找不到太多有关的信息,因此我假设在WordPress中使用此函数并不常见网站。

说了这么多,我对这个特定的主题不是很精通,所以我想知道最好的行动方案是什么来真正获得所需的总金额?我很沮丧!谢谢!

注意:(浮点数)在此处是类型转换的,但是在我不进行强制转换之前,只有折扣是浮点数,价格是字符串。但是错误仍然存​​在,我想也许将两者都更改为浮点数会有所帮助。这没有影响。

0 个答案:

没有答案