当其他语言失败时,为什么PHP会计算0.1 + 0.2?

Mar*_*ery 8 php floating-point

正如在浮点数学中所描述的那样,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)
Run Code Online (Sandbox Code Playgroud)

但是,尽管输出如上所示,0.1 + 0.2!= 0.3:

php > var_dump(0.1 + 0.2 == 0.3);
bool(false)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

laf*_*for 12

PHP有一个precision配置值,用于设置浮点数中显示的有效位数.默认为14,原因0.1 + 0.2显示为0.3.

但是,如果你这样做:

ini_set('precision', 17);
echo 0.1 + 0.2;
Run Code Online (Sandbox Code Playgroud)

你得到 0.30000000000000004