PHP語言中的intval函數是將一個變量轉換成整數類型的函數,它的第二個可選參數是基數。我們都知道,PHP中的int類型的長度是32位,也就是說,intval函數能夠轉換到的最大整數值為2147483647。那對于超過32位的整數值,該怎么辦呢?
如果用intval函數轉換超過32位的整數值,會發現結果不如預期。例如:
$value = 1234567890123456789; echo intval($value); //2147483647
超過32位的整數值被轉換為了最大整數值。但要想得到正確的結果,可以使用bcmath擴展提供的bcrypeval函數:
$value = '1234567890123456789'; echo bcmul($value, 1); //1234567890123456789
由于PHP中的int類型長度是32位,所以在對超過32位的整數值進行處理時,應當考慮使用字符串類型代替int類型。
在PHP中,字符串類型和整數類型之間的自動類型轉換是非常方便的。例如:
$value_str = '123'; $value_int = $value_str + 1; echo $value_int; //124
但是,對于超過32位的整數值,在使用字符串類型時依然需要注意,因為字符串類型在超過一定長度后,也會出現精度丟失的情況。例如:
$value_str = '12345678901234567890'; $value_int = $value_str + 1; echo $value_int; //1.2345678901235E+19
當然,對于這種情況,可以使用bcmath擴展提供的大整數運算函數來進行處理。例如:
$value_str = '12345678901234567890'; $value_int = bcadd($value_str, 1); echo $value_int; //12345678901234567891
總之,在使用PHP處理超過32位的整數值時,應當避免使用intval函數,應當使用字符串類型或者bcmath擴展提供的運算函數。
上一篇ecc算法 php
下一篇php int bool