整數

整數的值包含了十進位、八進位、十六進位等等,也有正負值

PHP語法如下

  • PHP預設是採用十進位
  • 如果要使用八進位制,前方要加上0
  • 如果要使用十六進位制,前方要加上0x
<?php
    $num = 168; //十進位
    $num = -168; //十進位的負數
    $num = 0168; //八進位,等於十進位的14,以0開頭
    $num = 0x168; //十六進位,等於十進位的360,以0x開頭
?>

整數型別在電腦系統中,可儲存的數值有最大值與最小值的限制,限制會與PHP所運作的平台有關係,根據系統平台不同而不同

當變數的數值超過平台int容許範圍時也就是所謂的溢位(Overflow),超過上下限將會被自動轉成浮點數

在PHP中可以使用PHP_INT_MAXPHP_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-1001.23121.2312E3等等都是合法的數值,但是A1jaca123就不合法

E/e是科學符號表示法的表示符號,E/e後面的數字代表的是次方數

例如3.1E1 = 3.1X101 = 31

轉型規則如下

  1. 如果字串開頭不是合法數值,就轉成0
  2. 如果字串開頭是合法數值、並且字串中沒有包含.eE,而且需要轉型的數字介於PHP_INT_MAXPHP_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)     
?>

在字串中包含.eE時,是先字串先轉成浮點數,再將浮點數轉成整數

<?php
    echo (int)"-1.6e5";        //會輸出-160000
    echo (int)"-1.6123456e5";  //會輸出-161234
?>

注意

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

results matching ""

    No results matching ""