ale*_*kin 3 php floating-point floating-accuracy
$a = ((0.1 + 0.7) * 10) == (int)((0.1 + 0.7) * 10);
Run Code Online (Sandbox Code Playgroud)
PHP返回false.
任何人都可以解释一下,为什么会这样?首先返回8,第二个7.
Gor*_*don 14
引用PHP浮点精度手册中的大红色警告:
通常,简单的小数部分像
0.1或0.7不能转换成它们的内部二进制对应物,而不会有很小的精度损失.这可能导致令人困惑的结果:例如,floor((0.1+0.7)*10)通常会返回7而不是预期8,因为内部表示将是类似的7.9.这是因为不可能用有限数字的十进制表示法表示一些分数.例如,
1/3以十进制形式变为0.3.因此,永远不要将浮点数结果信任到最后一位,并且永远不要将浮点数与相等性进行比较.如果需要更高的精度,可以使用任意精度数学函数和gmp函数.
浮点运算不精确.而不是8.0,你可以获得7.999 ...当被转换为整数时被截断为7.
echo number_format((0.1 + 0.7) * 10, 20);
Run Code Online (Sandbox Code Playgroud)
结果:
7.99999999999999911182
Run Code Online (Sandbox Code Playgroud)