首页 > 解决方案 > PHP 数学差异

问题描述

这是一些简单的数学运算,并没有完全加起来。

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 数学问题。

标签: phpmathdecimalrounding

解决方案


990 + 1% 不等于 1000。它等于 999.9。

990 * 1.01 = 999.9

话虽这么说- 你永远不能依赖像这样的不同浮点计算来准确地评估正确的答案。与其他语言一样,PHP 没有“舍入问题”,而是使用与实数的行为方式不同的浮点数。


推荐阅读