如题
遇到这样的问题
$a = "222111565652521142";
$b = "222111565652521139";
$c = 222111565652521142;
$d = 222111565652521139;
var_dump($a);
echo "<br/>";
var_dump($b);
echo "<br/>";
var_dump($c);
echo "<br/>";
var_dump($d);
echo "<br/>";
if ($a == $b) {
echo 3;
}else{
echo 31;
}
echo "<br/>";
if ($c == $d) {
echo 4;
}else{
echo 41;
}
echo "<br/>";
结果是
string '222111565652521142' (length=18)
string '222111565652521139' (length=18)
float 2.2211156565252E+17
float 2.2211156565252E+17
31
4
问题来了,第二种情况 如何进行两者的比较
问题二: 从数据库中读出来的这两组数字,var_dump后显示是string(18) 但是比较结果和上边的例子恰好相反,两个string的 比较相等 也通过了.
求解
------解决方案--------------------
我们使用的php环境大多是32位的,而在32位环境中一个长整型数是用4个字节表示的
即 -pow(2,31) 到 pow(2,31) 之间
pow(2,31) = 2147483648
pow(2,32) = 4294967296
这显然不能满足一般的需要,所以 php 在 logn 类型的基础上做了一些扩充。用了6个字节存储1个整型数
也就是可表示 -99999999999999 到 99999999999999 之间的正数,即 14 位整数
而在64位的php中就可轻易的突破这一限制了,因为64位的环境中,一个logn类型本身就是8个字节
------解决方案--------------------
用===不会转换