PHP基礎-資料型別-integet

柳旦旦發表於2021-01-19

integer 是集合 ℤ = {…, -2, -1, 0, 1, 2, …} 中的某個數。

語法

整型值可以使用十進位制,十六進位制,八進位制或二進位制表示,前面可以加上可選的符號(- 或者 +)。 可以用 負運算子 來表示一個負的integer。

二進位制表達的 integer 自 PHP 5.4.0 起可用。

要使用八進位制表達,數字前必須加上 0(零)。要使用十六進位制表達,數字前必須加上 0x。要使用二進位制表達,數字前必須加上 0b

從 PHP 7.4.0 開始,整型數值可能會包含下劃線 (_),為了更好的閱讀體驗,這些下劃線在展示的時候,會被 PHP 過濾掉。

Example #1 整數文字表達

<?php
$a = 1234; // 十進位制數
$a = 0123; // 八進位制數 (等於十進位制 83)
$a = 0x1A; // 十六進位制數 (等於十進位制 26)
$a = 0b11111111; // 二進位制數字 (等於十進位制 255)
$a = 1_234_567; // 整型數值 (PHP 7.4.0 以後)
?>

整數溢位

如果給定的一個數超出了 integer 的範圍,將會被解釋為 float。同樣如果執行的運算結果超出了 integer 範圍,也會返回 float。

Example #2 32 位系統下的整數溢位

<?php
$large_number = 2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number = 2147483648;
var_dump($large_number);                     // float(2147483648)

$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);                     // float(50000000000)
?>

Example #3 64 位系統下的整數溢位

<?php
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million = 1000000;
$large_number =  50000000000000 * $million;
var_dump($large_number);                     // float(5.0E+19)
?>

PHP 中沒有整除的運算子。1/2 產生出 float 0.5。 值可以捨棄小數部分,強制轉換為 integer,或者使用 round() 函式可以更好地進行四捨五入。

從 PHP 7.0.0 開始,函式 intdiv() 可以用於整數除法。

<?php
var_dump(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>

轉換為整形

要明確地將一個值轉換為 integer,用 (int)(integer) 強制轉換。不過大多數情況下都不需要強制轉換,因為當運算子,函式或流程控制需要一個 integer 引數時,值會自動轉換。還可以通過函式 intval() 來將一個值轉換成整型。

將 resource 轉換成 integer 時, 結果會是 PHP 執行時為 resource 分配的唯一資源號。

從布林值轉換

FALSE 將產生出 0(零),TRUE 將產生出 1(壹)。

從浮點型轉換

當從浮點數轉換成整數時,將向下取整。

PHP 7.0.0 起,NaN 和 Infinity 在轉換成 integer 時,不再是 undefined 或者依賴於平臺,而是都會變成零。

絕不要將未知的分數強制轉換為 integer,這樣有時會導致不可預料的結果,比如:

<?php
echo (int) ( (0.1+0.7) * 10 ); // 顯示 7!
?>

從字串轉換

當一個字串被當作一個數值來取值,其結果和型別如下:

如果該字串沒有包含 ‘.’,’e’ 或 ‘E’ 並且其數字值在整型的範圍之內(由 PHP_INT_MAX 所定義),該字串將被當成 integer 來取值。其它所有情況下都被作為 float 來取值。

該字串的開始部分決定了它的值。如果該字串以合法的數值開始,則使用該數值。否則其值為 0(零)。合法數值由可選的正負號,後面跟著一個或多個數字(可能有小數點),再跟著可選的指數部分。指數部分由 ‘e’ 或 ‘E’ 後面跟著一個或多個數字構成。

<?php
$foo = 1 + "10.5";                // $foo is float (11.5)
$foo = 1 + "-1.3e3";              // $foo is float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";                // $foo is integer (1)
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;          // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)     
?>

從NULL轉換

NULL 會轉換為零 (0)

從其它型別轉換

Caution 沒有定義從其它型別轉換為整型的行為。不要依賴任何現有的行為,因為它會未加通知地改變

本作品採用《CC 協議》,轉載必須註明作者和本文連結
✍️部落格文章皆為網路收藏整理,作書籤使用,方便後期查閱。

相關文章