【发布时间】:2013-11-26 04:20:39
【问题描述】:
我正在计算某些东西的费用(货币),而当金额应该为 0.00 时,PHP 的行为很奇怪。它将最终结果作为浮点数给出,而不是应该是 0。
在我的数据库中,我有下表
id | transaction_total | charge_fees | deposit_fee | amount_to_customer | fees_minus_total_difference
所以当我去检查以确保费用 + 支付金额 - 总计 = 0.00
(96.54 + .25 + 3.20 - 99.99) = 1.4210854715202E-14
为什么结果是浮点数而不是实际为零?这些数字原本是更多的小数位,但我使用 number_format 将其放入 2 位。例如,收费实际上可能是 3.19987
number_format(3.19971,2,'.','') //equals 3.20
当我将它保存在我的数据库中时,它显示为 3.20。当我在计算总额/费用检查中使用它时,结果不为零,尽管接近。
【问题讨论】:
-
永远不要将浮点数用于货币价值,除非您不介意损失少量金钱(或可能获得一些)。以美分计算或使用 bcmath 等任意精度库计算。
-
PHP Math Precision的可能重复
标签: php