当前位置:Gxlcms > PHP教程 > 较长数字字符串的比较有关问题

较长数字字符串的比较有关问题

时间:2021-07-01 10:21:17 帮助过:32人阅读

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

如题
遇到这样的问题


$a = "222111565652521142";
$b = "222111565652521139";
$c = 222111565652521142;
$d = 222111565652521139;

var_dump($a);
echo "
";
var_dump($b);
echo "
";
var_dump($c);
echo "
";
var_dump($d);
echo "
";

if ($a == $b) {
echo 3;
}else{
echo 31;
}
echo "
";

if ($c == $d) {
echo 4;
}else{
echo 41;
}
echo "
";


结果是





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



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

人气教程排行