日期:2014-05-16  浏览次数:20499 次

较长数字 字符串 的比较问题
本帖最后由 anyilaoliu 于 2013-12-13 15:04:43 编辑
如题 
遇到这样的问题


$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个字节



------解决方案--------------------
用===不会转换