較長數字 字串 的比較問題
本帖最後由 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個位元組
------解決方案--------------------
用===不會轉換