floatval

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

floatvalВозвращает значение переменной в виде числа с плавающей точкой

Описание

float floatval ( mixed $var )

Возвращает значение переменной var в виде числа с плавающей точкой (float).

Список параметров

var

Может быть любого скалярного типа. floatval() нельзя использовать с объектами, в этом случае возникнет ошибка уровня E_NOTICE и функция вернет 1.

Возвращаемые значения

Значение заданной переменной в виде числа с плавающей точкой. Пустые массивы в качестве аргумента возвращают 0, непустые массивы возвращают 1.

Строки чаще всего возвращают 0, тем не менее результат зависит от самых левых символов строки. Применяются правила приведения к float. apply.

Примеры

Пример #1 Пример использования floatval()

<?php
$var 
'122.34343The';
$float_value_of_var floatval($var);
echo 
$float_value_of_var// 122.34343
?>

Пример #2 Пример использования floatval() с нечисловыми крайними левыми символами

<?php
$var 
'The122.34343';
$float_value_of_var floatval($var);
echo 
$float_value_of_var// 0
?>

Смотрите также

Коментарии

Instead of using floatval which only appeared in PHP 4.2 you could juse use $variable = (float)$variable

This function doesn't seem to add any functionality that wasn't already there.
2003-03-07 21:07:41
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
This function converts a string to a float no matter is the decimal separator dot (.) or comma (,). It also converts integers correctly. It takes the digits from the beginning of the string and ignores all other characters.

<?php
function floatval($strValue) {
   
$floatValue ereg_replace("(^[0-9]*)(\\.|,)([0-9]*)(.*)""\\1.\\3"$strValue);
   if (!
is_numeric($floatValue)) $floatValue ereg_replace("(^[0-9]*)(.*)""\\1"$strValue);
   if (!
is_numeric($floatValue)) $floatValue 0;
   return 
$floatValue;
  }
?>

-Zipi (Finland)
2003-04-25 05:51:06
http://php5.kiev.ua/manual/ru/function.floatval.html
floatval() does not work with "$35,234.43", as it could not handle the '$' and the ','.  The following takes care of all values, such that only numeric and the decimal sign are input into floatval().  (It probably shows I'm an old 'c' guy)...this function only lightly tested.

<?php
function strtflt($str) {
   
$il strlen($str);
   
$flt "";
   
$cstr "";
   
    for(
$i=0;$i<$il;$i++) {
       
$cstr substr($str$i1);
        if(
is_numeric($cstr) || $cstr == ".")
           
$flt $flt.$cstr;
    }
    return 
floatval($flt);
}
?>

Richard Vickers
vickers@hotpop.com
2004-01-26 17:45:39
http://php5.kiev.ua/manual/ru/function.floatval.html
Easier-to-grasp-function for the ',' problem.

<?php
function Getfloat($str) {
  if(
strstr($str",")) {
   
$str str_replace("."""$str); // replace dots (thousand seps) with blancs
   
$str str_replace(",""."$str); // replace ',' with '.'
 
}
 
  if(
preg_match("#([0-9\.]+)#"$str$match)) { // search for number that may contain '.'
   
return floatval($match[0]);
  } else {
    return 
floatval($str); // take some last chances with floatval
 
}
}

echo 
Getfloat("$ 19.332,35-"); // will print: 19332.35
?>
2004-06-15 22:00:11
http://php5.kiev.ua/manual/ru/function.floatval.html
Use this snippet to extract any float out of a string. You can choose how a single dot is treated with the (bool) 'single_dot_as_decimal' directive.
This function should be able to cover almost all floats that appear in an european environment.

<?php

   
function float($str$set=FALSE
    {           
        if(
preg_match("/([0-9\.,-]+)/"$str$match))
        {
           
// Found number in $str, so set $str that number
           
$str $match[0];
           
            if(
strstr($str',')) 
            {
               
// A comma exists, that makes it easy, cos we assume it separates the decimal part.
               
$str str_replace('.'''$str);    // Erase thousand seps
               
$str str_replace(',''.'$str);    // Convert , to . for floatval command
               
               
return floatval($str);
            }
            else
            {
               
// No comma exists, so we have to decide, how a single dot shall be treated
               
if(preg_match("/^[0-9]*[\.]{1}[0-9-]+$/"$str) == TRUE && $set['single_dot_as_decimal'] == TRUE)
                {
                   
// Treat single dot as decimal separator
                   
return floatval($str);
                   
                }
                else
                {
                   
// Else, treat all dots as thousand seps
                   
$str str_replace('.'''$str);    // Erase thousand seps
                   
return floatval($str);
                }               
            }
        }
       
        else
        {
           
// No number found, return zero
           
return 0;
        }
    }

// Examples

echo float('foo 123,00 bar'); // returns 123.00
echo float('foo 123.00 bar' array('single_dot_as_decimal'=> TRUE)); //returns 123.000
echo float('foo 123.00 bar' array('single_dot_as_decimal'=> FALSE)); //returns 123000
echo float('foo 222.123.00 bar' array('single_dot_as_decimal'=> TRUE)); //returns 222123000
echo float('foo 222.123.00 bar' array('single_dot_as_decimal'=> FALSE)); //returns 222123000

// The decimal part can also consist of '-'
echo float('foo 123,-- bar'); // returns 123.00

?>

Big Up.
Philipp
2004-12-14 04:38:40
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
you can also use typecasting instead of functions:

(float) $value;
2005-04-19 08:30:50
http://php5.kiev.ua/manual/ru/function.floatval.html
@pillepop2003 at yahoo dot de

<?php
float
('-100.00', array('single_dot_as_decimal' => true)); // whoops, returns -10000
?>

use: "/^[0-9-]*[\.]{1}[0-9-]+$/"
instead of: "/^[0-9]*[\.]{1}[0-9-]+$/"
2006-09-04 11:03:16
http://php5.kiev.ua/manual/ru/function.floatval.html
For those of you, who are looking for a function that rips the first,
but longest possible float (or at least integer) from a string,
like 123.45 from the string "Price: 123,45$"

If no useable value is found, the function returns false.

Checks for both comma and dot as decimal-separator,
but does not check for 3 digits between thousands,
so 1,234.5 is as valid as 1,23,4.5 (both will return 1234.5)

12,.3 will return 12
1,000,000 will return 1000.0 !

(if thousands separator is defined,
decimals should be defined too ... 
in fact I was too lazy to check for that too)

Here you go, and feel free to optimize the function ;)
<?php
function getFloat($pString) {
    if (
strlen($pString) == 0) {
            return 
false;
    }
   
$pregResult = array();

   
$commaset strpos($pString,',');
    if (
$commaset === false) {$commaset = -1;}

   
$pointset strpos($pString,'.');
    if (
$pointset === false) {$pointset = -1;}

   
$pregResultA = array();
   
$pregResultB = array();

    if (
$pointset $commaset) {
       
preg_match('#(([-]?[0-9]+(\.[0-9])?)+(,[0-9]+)?)#'$pString$pregResultA);
    }
   
preg_match('#(([-]?[0-9]+(,[0-9])?)+(\.[0-9]+)?)#'$pString$pregResultB);
    if ((isset(
$pregResultA[0]) && (!isset($pregResultB[0]) 
            || 
strstr($preResultA[0],$pregResultB[0]) == 
           
|| !$pointset))) {
       
$numberString $pregResultA[0];
       
$numberString str_replace('.','',$numberString);
       
$numberString str_replace(',','.',$numberString);
    }
    elseif (isset(
$pregResultB[0]) && (!isset($pregResultA[0]) 
            || 
strstr($pregResultB[0],$preResultA[0]) == 
           
|| !$commaset)) {
       
$numberString $pregResultB[0];
       
$numberString str_replace(',','',$numberString);
    }
    else {
        return 
false;
    }
   
$result = (float)$numberString;
    return 
$result;
}
?>
2007-07-19 12:26:03
http://php5.kiev.ua/manual/ru/function.floatval.html
Most of the functions listed here that deal with $ and , are unnecessarily complicated. You can use ereg_replace() to strip out ALL of the characters that will cause floatval to fail in one simple line of code:

<?php $output floatval(ereg_replace("[^-0-9\.]","",$input)); ?>
2008-07-20 21:07:33
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
The last getFloat() function is not completely correct.

1.000.000 and 1,000,000 and its negative variants are not correctly parsed. For the sake of comparing and to make myself clear I use the name parseFloat in stead of getFloat for the new function:

<?php
function parseFloat($ptString) {
            if (
strlen($ptString) == 0) {
                    return 
false;
            }
           
           
$pString str_replace(" """$ptString);
           
            if (
substr_count($pString",") > 1)
               
$pString str_replace(","""$pString);
           
            if (
substr_count($pString".") > 1)
               
$pString str_replace("."""$pString);
           
           
$pregResult = array();
       
           
$commaset strpos($pString,',');
            if (
$commaset === false) {$commaset = -1;}
       
           
$pointset strpos($pString,'.');
            if (
$pointset === false) {$pointset = -1;}
       
           
$pregResultA = array();
           
$pregResultB = array();
       
            if (
$pointset $commaset) {
               
preg_match('#(([-]?[0-9]+(\.[0-9])?)+(,[0-9]+)?)#'$pString$pregResultA);
            }
           
preg_match('#(([-]?[0-9]+(,[0-9])?)+(\.[0-9]+)?)#'$pString$pregResultB);
            if ((isset(
$pregResultA[0]) && (!isset($pregResultB[0])
                    || 
strstr($preResultA[0],$pregResultB[0]) == 0
                   
|| !$pointset))) {
               
$numberString $pregResultA[0];
               
$numberString str_replace('.','',$numberString);
               
$numberString str_replace(',','.',$numberString);
            }
            elseif (isset(
$pregResultB[0]) && (!isset($pregResultA[0])
                    || 
strstr($pregResultB[0],$preResultA[0]) == 0
                   
|| !$commaset)) {
               
$numberString $pregResultB[0];
               
$numberString str_replace(',','',$numberString);
            }
            else {
                return 
false;
            }
           
$result = (float)$numberString;
            return 
$result;
}
?>

Comparing of float parsing functions with the following function:

<?php
function testFloatParsing() {
   
$floatvals = array(
       
"22 000,76",
       
"22.000,76",
       
"22,000.76",
       
"22 000",
       
"22,000",
       
"22.000",
       
"22000.76",
       
"22000,76",
       
"1.022.000,76",
       
"1,022,000.76",
       
"1,000,000",
       
"1.000.000",
       
"1022000.76",
       
"1022000,76",
       
"1022000",
       
"0.76",
       
"0,76",
       
"0.00",
       
"0,00",
       
"1.00",
       
"1,00",
       
"-22 000,76",
       
"-22.000,76",
       
"-22,000.76",
       
"-22 000",
       
"-22,000",
       
"-22.000",
       
"-22000.76",
       
"-22000,76",
       
"-1.022.000,76",
       
"-1,022,000.76",
       
"-1,000,000",
       
"-1.000.000",
       
"-1022000.76",
       
"-1022000,76",
       
"-1022000",
       
"-0.76",
       
"-0,76",
       
"-0.00",
       
"-0,00",
       
"-1.00",
       
"-1,00"
   
);
   
    echo 
"<table>
        <tr>
            <th>String</th>
            <th>floatval()</th>
            <th>getFloat()</th>
            <th>parseFloat()</th>
        </tr>"
;
       
    foreach (
$floatvals as $fval) {
        echo 
"<tr>";
        echo 
"<td>" . (string) $fval "</td>";
       
        echo 
"<td>" . (float) floatval($fval) . "</td>";
        echo 
"<td>" . (float) getFloat($fval) . "</td>";
        echo 
"<td>" . (float) parseFloat($fval) . "</td>";
        echo 
"</tr>";
    }
    echo 
"</table>";
}
?>
2008-07-30 08:21:45
http://php5.kiev.ua/manual/ru/function.floatval.html
<?php
function floatvalue($value) {
     return 
floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,2}))*$#e'"str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'"$value));
}
?>

It is much shorter and able to handle those one, too:
xx,-
xx,--
xx'xxx,xx

After using floatvalue() you can go forward with number_format() as usual.
2008-08-26 18:55:57
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
i noticed all (well, unless i missed something) the functions working with decimals destroy trailing decimal places. this function restores them in case you want to be able to display a consistent precision for users. 

<?php
function decimal($val$precision 0) {
    if ((float) 
$val) :
       
$val round((float) $val, (int) $precision);
        list(
$a$b) = explode('.'$val);
        if (
strlen($b) < $precision$b str_pad($b$precision'0'STR_PAD_RIGHT);
        return 
$precision "$a.$b" $a;
    else : 
// do whatever you want with values that do not have a float
       
return $val;
    endif;
}
?>
2009-03-09 23:10:52
http://php5.kiev.ua/manual/ru/function.floatval.html
locale aware floatval:

<?php
function ParseFloat($floatString){
   
$LocaleInfo localeconv();
   
$floatString str_replace($LocaleInfo["mon_thousands_sep"] , ""$floatString);
   
$floatString str_replace($LocaleInfo["mon_decimal_point"] , "."$floatString);
    return 
floatval($floatString);
}
?>
2009-07-29 11:12:34
http://php5.kiev.ua/manual/ru/function.floatval.html
setlocale() and floatval() duo could break your DB queries in a very simple way:

<?php
setlocale
(LC_ALL'bg_BG''bgr_BGR'); 
echo 
floatval(0.15); // output 0,15
?>

You would need simple workaround like:

<?php
function number2db($value)
{
   
$larr localeconv();
   
$search = array(
       
$larr['decimal_point'], 
       
$larr['mon_decimal_point'], 
       
$larr['thousands_sep'], 
       
$larr['mon_thousands_sep'], 
       
$larr['currency_symbol'], 
       
$larr['int_curr_symbol']
    );
   
$replace = array('.''.''''''''');

    return 
str_replace($search$replace$value);
}

setlocale(LC_ALL'bg_BG''bgr_BGR'); 
$testVal floatval(0.15); // result 0,15
var_dump($testValnumber2db($testVal));

// Result:
// float(0,15) 
// string(4) "0.15" 
?>
2011-01-03 10:37:11
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
To view the very large and very small numbers (eg from a database DECIMAL), without displaying scientific notation, or leading zeros.

FR : Pour afficher les très grand et très petits nombres (ex. depuis une base de données DECIMAL), sans afficher la notation scientifique, ni les zéros non significatifs.

<?php
function floattostr$val )
{
   
preg_match"#^([\+\-]|)([0-9]*)(\.([0-9]*?)|)(0*)$#"trim($val), $o );
    return 
$o[1].sprintf('%d',$o[2]).($o[3]!='.'?$o[3]:'');
}
?>

<?php
echo floattostr("0000000000000001");
echo 
floattostr("1.00000000000000");
echo 
floattostr("0.00000000001000");
echo 
floattostr("0000.00010000000");
echo 
floattostr("000000010000000000.00000000000010000000000");
echo 
floattostr("-0000000000000.1");
echo 
floattostr("-00000001.100000");

// result
// 1
// 1
// 0.00000000001
// 0.0001
// 10000000000.0000000000001
// -0.1
// -1.1

?>
2011-10-31 09:26:21
http://php5.kiev.ua/manual/ru/function.floatval.html
This function takes the last comma or dot (if any) to make a clean float, ignoring thousand separator, currency or any other letter :

function tofloat($num) {
    $dotPos = strrpos($num, '.');
    $commaPos = strrpos($num, ',');
    $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : 
        ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false);
   
    if (!$sep) {
        return floatval(preg_replace("/[^0-9]/", "", $num));
    } 

    return floatval(
        preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . '.' .
        preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num)))
    );
}

$num = '1.999,369€';
var_dump(tofloat($num)); // float(1999.369)
$otherNum = '126,564,789.33 m²';
var_dump(tofloat($otherNum)); // float(126564789.33)

Demo : http://codepad.org/NW4e9hQH
2014-02-26 11:25:20
http://php5.kiev.ua/manual/ru/function.floatval.html
More elegant function with selection of decimal point (deafault ,):
<?php
function floatvaldec($v$dec=',') { return floatval(ereg_replace("," "." ereg_replace("[^-0-9$dec]","",$v))); }

// examples:
echo '<br>'.floatvaldec('somthing123.456.789,12Euro') ; 
echo 
'<br>'.floatvaldec('x123,456 789.12 Euro''.') ; 
echo 
'<br>'.floatvaldec('123.456 789,12$') ;
?>
2015-10-24 13:18:48
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
There is much easier way to deal with formatted numbers:

<?php
$str 
'13,232.95';
$var = (double)filter_var($strFILTER_SANITIZE_NUMBER_FLOATFILTER_FLAG_ALLOW_FRACTION);
var_dump($var);
?>
double(13232.95)
2016-03-23 04:28:50
http://php5.kiev.ua/manual/ru/function.floatval.html
<?php   
       $price 
'1.299,00 EUR';
   
//$price = 'EUR 1.299,00';
    //$price = '$1,745.09';
    //$price = '$14';
    //$price = '$.14';
   

   
function floatValue($str){
        if(
preg_match("/([0-9\.,-]+)/"$str$match)){
           
$value $match[0];
            if( 
preg_match("/(\.\d{1,2})$/"$value$dot_delim) ){
               
$value = (float)str_replace(','''$value);
            }
            else if( 
preg_match("/(,\d{1,2})$/"$value$comma_delim) ){
               
$value str_replace('.'''$value); 
               
$value = (float)str_replace(',''.'$value);
            }
            else
               
$value = (int)$value;
        }
        else {
           
$value 0;
        }
        return 
$value;
    }
   
    echo 
floatValue($price);
/*
    1.299,00
    1.299,00
    1,745.09
    14
    0.14
*/
?>
2016-07-05 11:05:42
http://php5.kiev.ua/manual/ru/function.floatval.html
Автор:
Be aware the last tofloat($num).

In theory it is very useful to have a function "separator-agnostic" (I think "locale based" solutions are useless if you have to parse a user file that can have a locale different to the server).

But this can lead to misinterpretations; in short: "123,456" is "123.456" (so comma used as decimal separator) or "123456" (comma used as thousand separator).

In any case, if you really want to use it, please don't forget that this function doesn't manage negative numbers.
2016-11-15 13:41:39
http://php5.kiev.ua/manual/ru/function.floatval.html
Float value less than 0.0001 (0.0000999999999999995) will be converted by floatval to scientific notation (exponential notation):
<?php

var_dump
(floatval(0.0000999999999999995)); # >> float(0,0001)

var_dump(floatval("0.000099")); # >> float(9.9E-5)

var_dump((string)floatval(0.000099)); # >> string(6) "9.9E-5"
2017-03-03 04:23:17
http://php5.kiev.ua/manual/ru/function.floatval.html

    Поддержать сайт на родительском проекте КГБ