84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
$a = 8-6.6; $b = 1.4; var_dump($a == $b); 为什么输出是false
我要成为大师
$a = 8-6.6; $b = 1.4; var_dump($a == $b); Why the output is false - PHP Chinese website Q&A - $a = 8-6.6; $b = 1.4; var_dump($a = = $b); Why is the output false-PHP Chinese website Q&A
Take a look and learn.
两个浮点型的数值是不能比较的
浮点数的精度 浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。 此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118…。 所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。 上已经讲了解决方法是用任意精度数学函数或者 gmp 函数,具体用什么函数还是看官方文档
$a = 8-6.6; $b = 1.4; var_dump($a == $b); Why the output is false - PHP Chinese website Q&A - $a = 8-6.6; $b = 1.4; var_dump($a = = $b); Why is the output false-PHP Chinese website Q&A
Take a look and learn.
两个浮点型的数值是不能比较的
浮点数的精度
浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118…。
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
上已经讲了解决方法是用任意精度数学函数或者 gmp 函数,具体用什么函数还是看官方文档