我只是在调试一个脚本,发现 if 语句没有按我预期的方式工作。
var_dump("6064365413078728979" == "6064365413078728452");
die();
上面的代码将产生以下结果:
bool(true)
使用 === 运算符,它可以按预期工作。任何人有任何想法为什么?
我在 x64 Windows 机器上使用 PHP 版本 5.3.13 和 wamp 安装。
我只是在调试一个脚本,发现 if 语句没有按我预期的方式工作。
var_dump("6064365413078728979" == "6064365413078728452");
die();
上面的代码将产生以下结果:
bool(true)
使用 === 运算符,它可以按预期工作。任何人有任何想法为什么?
我在 x64 Windows 机器上使用 PHP 版本 5.3.13 和 wamp 安装。
<?php
$a=6064365413078728979;
$b=6064365413078728452;
echo $a."<br>".$b;
//var_dump( $a==$b );
die();
?>
当你运行它时,在你的机器上可能会超过一个数字的限制,这是一个数字比较发生。试试上面的脚本,看看 $a 的值可能与你给出的值不同。
这就是为什么当两者在数字上进行比较时,它们是相等的。因此 ,按照其他人的建议使用===
编辑:基于@Axel 建议的解释。
PHP手册解释
浮点数的大小取决于平台,尽管最大约 1.8e308 和大约 14 位十进制数字的精度是一个常见值(64 位 IEEE 格式)。
这个网站提供和解释溢出现象和一个小的 php 代码来测试你的系统的整数和浮点范围。了解服务器上的限制很可能最好地解释为什么会出现报价流