【发布时间】:2019-11-22 02:39:34
【问题描述】:
这是一些简单的数学运算,并不完全加起来。
990 / 7670 = 0.12907431
假设我要收取 1% 的费用,我从 1000 开始。
同样的数学适用于(1000 - 1% = 990)
首先:990 / 7670 = 0.12907431
然后使用我的原始号码 (+1%):1000 / 0.12907431 = 7747.4750785
终于抵消了从 1000 减少的 1%。我将 7670 增加了 1%:7670 * 1.01 = 7746.7。
为什么最后两个值有 0.01% 的差异?这个 PHP 对小数的处理很糟糕吗?
我看不出我在哪里失去了它,我觉得数学是正确的。我知道 PHP 有时会出现舍入问题,我想知道它是否就这么简单,或者我是否错过了一个 obv 数学问题。
【问题讨论】:
-
对浮点的进一步说明——因为计算机本身是 2 进制的,所以 10 进制的小数必须是近似的。就像你不能精确地写出十进制的 1/3 一样,以 10 为底的小数也不能总是以 2 为底精确存储。因此,需要四舍五入。如果您需要浮点数的精度,请考虑使用 bcmath 扩展。