ScotlandPHP 2019

# is_float

(PHP 4, PHP 5, PHP 7)

is_floatFinds whether the type of a variable is float

### Description

is_float ( mixed `\$var` ) : bool

Finds whether the type of the given variable is float.

Note:

To test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric().

### Parameters

`var`

The variable being evaluated.

### Return Values

Returns `TRUE` if `var` is a float, `FALSE` otherwise.

### Examples

Example #1 is_float() example

``` var_dump(is_float(27.25));var_dump(is_float('abc'));var_dump(is_float(23));var_dump(is_float(23.5));var_dump(is_float(1e7));  //Scientific Notationvar_dump(is_float(true));?> ```

The above example will output:

```bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)
```

• is_bool() - Finds out whether a variable is a boolean
• is_int() - Find whether the type of a variable is integer
• is_numeric() - Finds whether a variable is a number or a numeric string
• is_string() - Find whether the type of a variable is string
• is_array() - Finds whether a variable is an array
• is_object() - Finds whether a variable is an object

### User Contributed Notes 9 notes

18
Boylett
10 years ago
``` 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); ```
13
nonzer0value
3 years ago
``` Coercing the value to float and back to string was a neat trick. You can also just add a literal 0 to whatever you're checking.<?phpfunction isfloat(\$value) {  // PHP automagically tries to coerce \$value to a number  return is_float(\$value + 0);}?>Seems to work ok:<?phpisfloat("5.0" + 0);  // trueisfloat("5.0");  // falseisfloat(5 + 0);  // falseisfloat(5.0 + 0);  // falseisfloat('a' + 0);  // false?>YMMV ```
Erutan409 at Hotmail dot com
3 years ago
``` Boylett's solution is elegant (http://php.net/manual/en/function.is-float.php#85848), but won't work for long float's or variables that are not explicitly type of 'string' or for long floats that are encased in quotes, making it a string that will be truncated/rounded when cast to a float.  So, further logic must be completed to test for the case.  Take the following example:<?phpif (!function_exists("test_float")) {    function test_float(\$test) {        if (!is_scalar(\$test)) {return false;}        \$type = gettype(\$test);        if (\$type === "float") {            return true;        } else {            return preg_match("/^\\d+\\.\\d+\$/", \$test) === 1;        }    }}\$test = "3.14159265358979323846264338g32795";var_dump(\$test);var_dump((float)\$test);var_dump(\$test == (string)(float)\$test);var_dump(test_float(\$test));?>Will produce (32-bit):string(34) "3.14159265358979323846264338g32795"float(3.1415926535898)bool(false)bool(false)So far, so good, right?  Yeah, but it's misleading, because the string is so long, that when it's converted to a float, it won't be equivalent to the comparison of the value being cast back into a string .  So the aforementioned short function works.  Look at this next example:<?php\$test = 3.1415926535897932384626433832795;var_dump(\$test);var_dump((float)\$test);var_dump(\$test == (string)(float)\$test);var_dump(test_float(\$test));?>Will produce (32-bit):float(3.1415926535898)float(3.1415926535898)bool(false)bool(true)Why is it not working now, but the value is truly a float?  Same reasoning as mentioned before.  The float is so long that it's truncated/rounded and doesn't match the comparison being done with the short-hand function.So, as you can see, more logic should be applied to the variable you're testing. ```
kshegunov at gmail dot com
10 years ago
``` 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]+))\$/ ```
KIVagant at gmail dot com
6 years ago
``` Yet another regular expression for float in real life: <?php function isTrueFloat(\$val) {     \$pattern = '/^[-+]?(((\\\\d+)\\\\.?(\\\\d+)?)|\\\\.\\\\d+)([eE]?[+-]?\\\\d+)?\$/';     return (!is_bool(\$val) && (is_float(\$val) || preg_match(\$pattern, trim(\$val)))); } ?> // Matches: 1, -1, 1.0, -1.0, '1', '-1', '1.0', '-1.0', '2.1', '0', 0, ' 0 ', ' 0.1 ', ' -0.0 ', -0.0, 3., '-3.', '.27', .27, '-0', '+4', '1e2', '+1353.0316547', '13213.032468e-13465', '-8E+3', '-1354.98879e+37436' // Non-matches: false, true, '', '-', '.a', '-1.a', '.a', '.', '-.', '1+', '1.3+', 'a1', 'e.e', '-e-4', 'e2', '8e', '3,25' ```
-2
Mitch
6 years ago
``` Another RegEx for matching floats:/^[+-]?(\d*\.\d+([eE]?[+-]?\d+)?|\d+[eE][+-]?\d+)\$/Matches:1e2+1353.031654713213.032468e-13465-8E+3-1354.98879e+37436Non-matches:8e2-e-4Easdf.safd8eEnjoy. ```
-2
phper
12 years ago
``` 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); ```
-2
ivan dot maruca at gmail dot com
3 years ago
``` check if string/numeric is float or not :<?phpfunction isFloat(\$value){  return ((int)\$value != \$value) ;}isFloat('1.5') ;//return trueisFloat('15');//return falseisFloat('1e16');//return trueisFloat('foo');//return falseisFloat(5.98);//return trueisFloat(5);//return false?> ```
-10
ckelley at the ca - cycleworks dot com
10 years ago
``` 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. ```