當前位置: 首頁> 最新文章列表> 如何避免使用is_int 時判斷浮點數為整數的錯誤?

如何避免使用is_int 時判斷浮點數為整數的錯誤?

gitbox 2025-05-31

如何避免使用is_int 判斷浮點數時出錯?

如果你想判斷一個浮點數是否是整數值,可以使用以下幾種方法:

1. 使用floor()ceil()函數比較

浮點數如果是整數,那麼它的floor() (向下取整)和ceil() (向上取整)都應等於自身。

示例代碼:

 <?php
function isFloatInteger($num) {
    if (!is_float($num)) {
        return false;
    }
    return floor($num) == $num;
}

var_dump(isFloatInteger(3.0));   // bool(true)
var_dump(isFloatInteger(3.5));   // bool(false)
var_dump(isFloatInteger(4));     // bool(false) — 4是整數,不是浮點數
?>

這段代碼先判斷是否是浮點數,接著用floor()判斷是否是整數值。

2. 利用類型轉換和比較

你可以把浮點數轉成整型,再和原值比較是否相等。

 <?php
function isFloatValueInteger($num) {
    return is_float($num) && (int)$num == $num;
}

var_dump(isFloatValueInteger(5.0));  // bool(true)
var_dump(isFloatValueInteger(5.1));  // bool(false)
?>

這種方法比較簡單直觀。

3. 使用filter_var結合正則表達式

如果變量是字符串類型,也可以用正則表達式判斷是否是浮點表示的整數。

 <?php
function isFloatStringInteger($str) {
    return preg_match('/^-?\d+\.0+$/', $str) === 1;
}

var_dump(isFloatStringInteger("3.0"));   // bool(true)
var_dump(isFloatStringInteger("3.00"));  // bool(true)
var_dump(isFloatStringInteger("3.1"));   // bool(false)
?>

這適合處理輸入的字符串數據。


總結

  • is_int()判斷的是變量類型是否為整型,不判斷數值本身是否為整數。

  • 浮點數即使數值是整數(如3.0),用is_int()判斷也會返回false

  • 需要判斷浮點數是否為整數值時,可以用floor() , (int)類型轉換,或者正則表達式等方法。

  • 根據實際場景選擇合適的方法來避免因類型判斷錯誤導致程序異常。

更多PHP相關內容,可以參考gitbox.net/php-tutorial