1

我在尝试在 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 网站中使用这个函数是不常见的。

话虽如此,我对这个特定主题并不十分精通,所以我想知道我最好的行动方案是什么才能真正获得我需要的金额?我完全被难住了!谢谢!

注意: (float) 在这里是类型转换的,但在此之前,如果我没有类型转换,则只有折扣是浮点数,价格是字符串。尽管如此,错误仍然存​​在,我认为也许将两者都更改为浮点数会有所帮助。这没有影响。

4

0 回答 0