If you want to test whether a string is containing a float, rather than if a variable is a float, you can use this simple little function:
function isfloat($f) return ($f == (string)(float)$f);
is_float
(PHP 4, PHP 5)
is_float — 変数の型が float かどうか調べる
説明
与えられた変数の型が float かどうかを調べます。
注意:
変数が数値もしくは数値形式の文字列の場合 (フォームからの入力の場合は 常に文字列となります) 、is_numeric() を使用する必要があります。
パラメータ
- var
-
評価する変数
返り値
もし var が float 型 の場合 TRUE、 そうでない場合は FALSE を返します。
例
例1 is_float() の例
<?php
if (is_float(27.25)) {
echo "float です\n";
} else {
echo "float ではありません\n";
}
var_dump(is_float('abc'));
var_dump(is_float(23));
var_dump(is_float(23.5));
var_dump(is_float(1e7)); // 科学記法
var_dump(is_float(true));
?>
上の例の出力は以下となります。
float です bool(false) bool(false) bool(true) bool(true) bool(false)
参考
- is_bool() - 変数が boolean であるかを調べる
- is_int() - 変数が整数型かどうかを検査する
- is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
- is_string() - 変数の型が文字列かどうかを調べる
- is_array() - 変数が配列かどうかを検査する
- is_object() - 変数がオブジェクトかどうかを検査する
Boylett
20-Sep-2008 09:29
ckelley at the ca - cycleworks dot com
14-Jul-2008 03:39
Personally, I use an implicit cast:
if( is_float($value+1) ){
$value=sprintf("%.2f",$value);
}
Which turns 22.0000000 query result into 22.00 for display to users.
kshegunov at gmail dot com
31-Mar-2008 01:32
As celelibi at gmail dot com stated, is_float checks ONLY the type of the variable not the data it holds!
If you want to check if string represent a floating point value use the following regular expression and not is_float(),
or poorly written custom functions.
/^[+-]?(([0-9]+)|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*)|
(([0-9]+|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*))[eE][+-]?[0-9]+))$/
celelibi at gmail dot com
03-Mar-2008 08:31
Unlike others comment may let you think, this function tests *only* the type of the variable. It does not perform any other test.
If you want to check if a string represents a valid float value, please use is_numeric instead.
WHITE new media architects - Jeroen
10-Jan-2008 03:24
The above printed "is_true_float" function is not correct.
It gives wrong answers on the following tests:
is_true_float("-4,123"); # returns false
is_true_float("0,123"); # returns false
So I changed the function to correctly handle qouted negative floats and quoted floats near zero:
<?php
function is_true_float($mVal)
{
return ( is_float($mVal)
|| ( (float) $mVal != round($mVal)
|| strlen($mVal) != strlen( (int) $mVal) )
&& $mVal != 0 );
}
?>
Kenaniah Cerny
06-Nov-2007 11:21
For those of you who have discovered that is_float() does not behave exactly the way you would expect it to when passing a string, here is a function that extends is_float properly report floating numbers given any sort of mixed variable.
<?php
function is_true_float($val){
if( is_float($val) || ( (float) $val > (int) $val || strlen($val) != strlen( (int) $val) ) && (int) $val != 0 ) return true;
else return false;
}
?>
<?php
//Tests
'4.0' returns true
'2.1' returns true
0 returns false
"0" returns false
3. returns true
13 returns false
"12" returns false
3.53 returns true
?>
Enjoy
phper
25-Jan-2006 12:08
A better way to check for a certain number of decimal places is to use :
$num_dec_places = 2;
number_format($value,$num_dec_places);
kirti dot contact at gmail dot com
18-Oct-2005 11:18
To check a float only should contain certain number of decimal places, I have used this simple function below
<?
function is_deccount($number,$decimal=2){
$m_factor=pow(10,$decimal);
if((int)($number*$m_factor)==$number*$m_factor)
return true;
else
return false;
}
?>
