2012-08-07 45 views
10

我想在php中檢查字符串是否爲雙精度。檢查字符串是否爲雙精度

這裏是我的代碼:

if(floatval($num)){ 
     $this->print_half_star(); 
    } 

$ num是一個string..The問題是,即使有一個int它給真實的。有沒有辦法來檢查它是否是一個浮點數,而不是一個整數!?

+0

您是否想對像「4.0」這樣的字符串執行print_half_star()? – 2012-08-07 16:22:56

回答

13
// Try to convert the string to a float 
$floatVal = floatval($num); 
// If the parsing succeeded and the value is not equivalent to an int 
if($floatVal && intval($floatVal) != $floatVal) 
{ 
    // $num is a float 
} 
+0

你的答案是更好的一個..塞繆爾 – 2012-08-07 16:32:56

+2

floatval(「24.0」)// 24,所以你的intval($ floatVal)!= $ floatVal將是假的 – pszaba 2016-03-18 16:40:01

+0

似乎不工作字符串像「75.00」:http://sandbox.onlinephpfunctions.com/code/49bad34c2e9b4c417c0711af275014e10d135952 – wutzebaer 2017-09-11 10:16:15

7

這將省去字符串表示的整數值:

if(is_numeric($num) && strpos($num, ".") !== false) 
{ 
    $this->print_half_star(); 
} 
+0

不錯的方法..想過它 – 2012-08-07 16:11:00

4

你可以試試這個:

function isfloat($num) { 
    return is_float($num) || is_numeric($num) && ((float) $num != (int) $num); 
} 

var_dump(isfloat(10));  // bool(false) 
var_dump(isfloat(10.5)); // bool(true) 
var_dump(isfloat("10")); // bool(false) 
var_dump(isfloat("10.5")); // bool(true) 
+0

好的和短..謝謝 – 2012-08-07 16:09:54

1

爲什麼不使用正則表達式的魔法

<?php 
$p = '/^[0-9]*\.[0-9]+$/'; 
$v = '89.00'; 
var_dump(preg_match($p, $v)); 
$v = '.01'; 
var_dump(preg_match($p, $v)); 
$v = '0.01'; 
var_dump(preg_match($p, $v)); 
$v = '89'; 
var_dump(preg_match($p, $v)); 
+2

這個正則表達式不會匹配包含科學記數法的特殊數字格式http://php.net/manual/en/language.types.float.php – Samuel 2012-08-07 16:05:50

+0

@Samuel謝謝你的好處。 – 2012-08-07 16:28:27

+1

$ p ='/^- ?[0-9] +(\。[0-9] +)?$ /';這一個允許負數,整數作爲雙數。 – hamboy75 2017-03-16 14:07:10

0

如果「雙字符串格式」像這樣「XXXXXX.XXXXXX」

嘗試檢查

function check_double_string($str){ 
$pairs = explode('.',$str); 
if (is_array($pairs) && count($pairs)==2) { 
    return (is_numeric($pairs[0]) && is_numeric($pairs[1])? true : false; 
} 
return false; 
} 
+0

我認爲你的代碼太多了。第一個返回可能會簡單地返回true – 2012-08-07 16:12:36

0

爲了讓我們得上添加任何零的回可通過floatval()或鑄字被砍掉年底浮動的所有案件(float)$num

$num='17.000010'; 
$num_float = (float)$num; //$num_float is now 17.00001 
//add the zero's back to $num_float 
while (strlen ($num) > strlen ($num_float)) $num_float = $num_float . '0'; //$spot_float in now a string again 


if($num_float != $num) then $num was no double :; 

!==沒有使用,以防萬一$num_float從未加入零轉換回一個字符串。對於不以0結尾的值,情況就是如此。