为什么PHP在其他语言失败的情况下可以计算0.1+0.2


Why can PHP calculate 0.1 + 0.2 when other languages fail?

如浮点数学坏了吗?中所述?,在大多数编程语言中,0.1 + 0.2的求值结果为0.30000000000000004

然而,PHP可能是所有编程语言中最好的,能够正确计算0.1+0.2:

php > echo 0.1 + 0.2;
0.3
php > var_dump(0.1 + 0.2);
float(0.3)

然而,尽管上面显示了输出,0.1+0.2!=0.3:

php > var_dump(0.1 + 0.2 == 0.3);
bool(false)

这是怎么回事?

PHP有一个precision配置值,用于设置以浮点数显示的有效位数。默认情况下为14,这就是0.1 + 0.2显示为0.3的原因。

然而,如果你这样做:

ini_set('precision', 17);
echo 0.1 + 0.2;

得到0.30000000000000004

相关文章: