0

可能的重复:
JavaScript 的数学被破坏了吗?
在 PHP 中添加分数会产生不同的结果

$grand_total =  (float)$subtotal_email +  (float)$delivery_email + (float)$fuel_surcharge_email - (float)$discount_coupon_email + (float)$texas_tax_email - (float)$cancel_fee_email -  (float)$refund_email - (float)$refund_tax_email - (float)$coupon_tmp;
echo (float)$subtotal_email." +  ".(float)$delivery_email." + ".(float)$fuel_surcharge_email." - ".(float)$discount_coupon_email." + ".(float)$texas_tax_email." - ".(float)$cancel_fee_email." -  ".(float)$refund_email." - ".(float)$refund_tax_email." - ".(float)$coupon_tmp." = ".(float)$grand_total;

当我在 php 中运行上述内容时,我得到以下输出:

89.99 + 0 + 16.2 - 0 + 8.61 - 3 - 100 - 10 - 1.8 = -2.88657986403E-15

但是,如果您查看 LHS,它应该是0,并且无论有没有浮动都会发生这种情况......知道为什么吗?

4

2 回答 2

2

浮点运算永远不会那么准确。如果您需要与零进行比较,则需要取不同并将其与一些较小的数字进行比较。

if (abs($result) < 0.00001)) {
    // it's zero
} else {

}
于 2012-07-03T09:41:14.120 回答
1

因为浮动。使用ints 并用美分 (* 100) 计算值。

于 2012-07-03T09:40:54.603 回答