關於php int 型別

2021-09-11 13:59:47 字數 890 閱讀 4219

在寫介面的時候經常需要對php的數字進行處理,當客戶端傳送資料過來的時候都認為資料是不可信的。

如果是整數的話一般直接強轉,例如

$num = (int)$num

如果是乙個浮點數的話,一般判斷是否為數字例如

is_numeric($num)

但是使用(int)強行轉換真的安全嗎?

php官網說 如下解釋

整型數的字長和平台有關,儘管通常最大值是大約二十億(32 位有符號)。64 位平台下的最大值通常是大約 9e18,除了 windows 下 php 7 以前的版本,總是 32 位的。 php 不支援無符號的 integer。integer 值的字長可以用常量 php_int_size來表示,自 php 4.4.0 和 php 5.0.5後,最大值可以用常量 php_int_max 來表示,最小值可以在 php 7.0.0 及以後的版本中用常量 php_int_min 表示。

也就是說win環境下值為 2147483647 到 -2147483647 範圍內值為int ,超出此範圍會自動轉換為float , 範圍為 2^32

在linux 64位環境下值為 9223372036854775807 到 -9223372036854775807,超出此範圍會自動轉換為float , 範圍為 2^64

那麼在當客戶端傳參大於臨界值時會怎麼樣呢

$min = 1;

$num = 2147483648;

var_dump($min < $num);

var_dump((int)$num);

//bool(true)

//int(-2147483648)

很明顯直接強轉溢位了導致資料成了負數,所以資料轉換和判斷一定要在業務邏輯判斷之前進行。尤其是業務邏輯與賬戶資金相關的操作更要注意。

php int型別思索

起因 業務涉及了一組大整數的累加和,每個整數大約9位數,每組有幾百個數字,擔心數字溢位,所以了解下php int型別的範圍。測試根據php官方文件,我的機器是64位,所以int範圍應該是在 263 1 到 263 1 整型數的字長和平台有關,儘管通常最大值是大約二十億 32 位有符號 64 位平台下...

php int怎麼轉日期

php int轉日期的方法 1 通過 lasttime time 新增乙個time時間戳 2 使用 date y m d lasttime 方法轉換成日期格式即可。php int怎麼轉日期?php把int型別轉換成時間型別 這次做專案遇到了時間戳轉換的問題 資料庫設計的時間戳為int格式的,所有需要...

php int轉float並且保留小數

如下面的例子 a 5.00 b floatval a c float a var dump b echo var dump c 列印出來的結果是 float 5 float 5 例子二 a 5 b floatval a c float a var dump b echo var dump c 列印的...