我想在php中檢查字符串是否爲雙精度。檢查字符串是否爲雙精度
這裏是我的代碼:
if(floatval($num)){
$this->print_half_star();
}
$ num是一個string..The問題是,即使有一個int它給真實的。有沒有辦法來檢查它是否是一個浮點數,而不是一個整數!?
我想在php中檢查字符串是否爲雙精度。檢查字符串是否爲雙精度
這裏是我的代碼:
if(floatval($num)){
$this->print_half_star();
}
$ num是一個string..The問題是,即使有一個int它給真實的。有沒有辦法來檢查它是否是一個浮點數,而不是一個整數!?
// 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
}
這將省去字符串表示的整數值:
if(is_numeric($num) && strpos($num, ".") !== false)
{
$this->print_half_star();
}
不錯的方法..想過它 – 2012-08-07 16:11:00
你可以試試這個:
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)
好的和短..謝謝 – 2012-08-07 16:09:54
爲什麼不使用正則表達式的魔法
<?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));
如果「雙字符串格式」像這樣「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;
}
我認爲你的代碼太多了。第一個返回可能會簡單地返回true – 2012-08-07 16:12:36
爲了讓我們得上添加任何零的回可通過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結尾的值,情況就是如此。
您是否想對像「4.0」這樣的字符串執行print_half_star()? – 2012-08-07 16:22:56