比较双精度的奇怪行为,两个PHP双精度值不相等

Vic*_*son 5 php double compare

我在PHP中有两个看似相等的double值(至少在回显它们时).

但是当将它们与double equals进行比较时,出于某种原因,它的评估结果为false.进行这种比较时是否有任何特殊注意事项?

edo*_*ian 9

您不应该使用==运算符比较浮点数.

看到大警告和 explanation in the php manual

可行的是断言两个数字在彼此之间的某个小距离内如下:

if(abs($a - $b) < 0.0001) {
    print("a is mostly equal to b");
}
Run Code Online (Sandbox Code Playgroud)

原因是由于在将小数转换为二进制之后执行的浮点运算导致的舍入误差,然后转换回十进制.这些来回转换导致0.1 + 0.2不相等的现象0.3.