2013-02-14 74 views
3

這真的很奇怪。我有這段代碼。檢查一個數字是否浮動在PHP中

$rewardAmt = $amt; 
if(is_float($rewardAmt)){ 
     print_r("is float");die; 
} else { 
     print_r("is not float"); die; 
} 

$ amt的值爲0.01。但它正在進入其他狀態。所以我做了一個$ amt的var_dump。它說的字符串(4) 所以我決定強制轉換$ AMT

$rewardAmt = (float)$amt; 

但這個問題是即使$ AMT的值爲1,但仍然被強制轉換爲浮動並進入if條件,這不應該發生。有沒有其他方法可以做到這一點?由於

+6

有什麼奇怪的是你使用'print_r' – 2013-02-14 02:11:18

回答

3

如果更改第一行

$rewardAmt = $amt+0; 

$ rewardAmt應轉換爲數值。

+0

謝謝..它工作:) – rkt 2013-02-14 07:23:39

10

使用filter_var()FILTER_VALIDATE_FLOAT

if (filter_var($amount, FILTER_VALIDATE_FLOAT)) 
{ 
    // good 
} 
+0

我試過這個,但是這會導致與類型轉換相同的概率。如果$ amount =「0.12」,則它變爲浮動(0.12),如果它是「1」,它將變爲浮動(1) – rkt 2013-02-14 07:25:42

+0

我也試過這個但不工作。 – 2014-11-14 07:06:51

+0

非常適合驗證浮點數或整數 – Imtiaz 2017-09-29 08:27:19

0

可以通過

$float = floatval($num); //Convert the string to a float 
if($float && intval($float) != $float) // Check if the converted int is same as the float value... 
{ 
    // $num is a float 
}else{ 
    // $num is an integer 
} 
0

可以使用一元+操作者,這將字符串轉換爲適當的類型(intfloat),然後用is_float測試得到的數據類型進行檢查:

$s = "3.00"; 
$n = +$s; 
var_dump($n); // float(3) 
var_dump(is_float($n)); // true 


$s = "3"; 
$n = +$s; 
var_dump($n); // int(3) 
var_dump(is_float($n)); // false 
相關問題