較長數字 字串 的比較有關問題

來源:互聯網
上載者:User
較長數字 字串 的比較問題
本帖最後由 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個位元組



------解決方案--------------------
用===不會轉換
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.