整數
整數的值包含了十進位、八進位、十六進位等等,也有正負值
PHP語法如下
- PHP預設是採用十進位
- 如果要使用八進位制,前方要加上0
- 如果要使用十六進位制,前方要加上0x
<?php
$num = 168; //十進位
$num = -168; //十進位的負數
$num = 0168; //八進位,等於十進位的14,以0開頭
$num = 0x168; //十六進位,等於十進位的360,以0x開頭
?>
整數型別在電腦系統中,可儲存的數值有最大值與最小值的限制,限制會與PHP所運作的平台有關係,根據系統平台不同而不同
當變數的數值超過平台int容許範圍時也就是所謂的溢位(Overflow),超過上下限將會被自動轉成浮點數
在PHP中可以使用PHP_INT_MAX
與PHP_INT_MIN
這兩個常數查看系統中整數型別所接受的最大值與最小值
<?php
echo PHP_INT_MAX."<br>";
echo PHP_INT_MIN."<br>";
//macOS上是
//9223372036854775807
//-9223372036854775808
?>
其他資料型別強制轉型成整數
在PHP內使用intval()
、(int)
、(integer)
可以將其他型別強制轉型成整數
<?php
$float = 1.23;
$num = intval($float); //使用函數強制轉型
$num = (int)$float;
$num = (integer)$float;
//這邊強制轉型後$num內儲存的值是1
?>
強制轉型成「整數」的規則
- boolean型別轉成整數
FALSE將轉成0,TRUE將轉成1
- float型別轉成整數
小數點以下的位數會被無條件捨去,只取整數部分
- string型別轉成整數
字串轉整數比較麻煩,要先定義一下什麼是「合法數值」,官方的解釋是這樣
合法數值由可選的正負號,後面跟著一個或多個數字(可能有小數點),再跟著可選的指數部分。指數部分由'e' 或'E' 後面跟著一個或多個數字構成。
這邊的「可選」是指可有可無的意思
其實白話一點,合法數值就是「正負號+整數/小數/科學記號」
舉例來說,1
、+10
、-100
、1.2312
、1.2312E3
等等都是合法的數值,但是A1
、jaca123
就不合法
E/e是科學符號表示法的表示符號,E/e後面的數字代表的是次方數
例如3.1E1 = 3.1X101 = 31
轉型規則如下
- 如果字串開頭不是合法數值,就轉成0
- 如果字串開頭是合法數值、並且字串中沒有包含
.
、e
、E
,而且需要轉型的數字介於PHP_INT_MAX
與PHP_INT_MIN
之間,會被視為整數來取值,其他情況都會被視為浮點數來取值,取值完成後再強制轉成整數
<?php
$test = 1 + (int)"10.5"; // $test is (11)
$test = 1 + (int)"-1.3e3"; // $test is (-1299)
$test = (int)"bob-1.3e3"; // $test is (0)
$test = 1 + (int)"bob3"; // $test is (1)
$test = 1 + (int)"10 Small Pigs"; // $test is (11)
$test = 4 + (int)"10.2 Little Piggies"; // $test is (14)
$test = (int)"10.0 pigs " + 1; // $test is (11)
$test = (int)"10.0 pigs " + 1.0; // $test is (11)
?>
在字串中包含.
、e
、E
時,是先字串先轉成浮點數,再將浮點數轉成整數
<?php
echo (int)"-1.6e5"; //會輸出-160000
echo (int)"-1.6123456e5"; //會輸出-161234
?>
注意:
PHP 7.0.0起,NaN和Infinity在轉換成integer時,不再是undefined或者依平台而定,而是都會變成零。