A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.php.net/manual/en/function.floatval.php below:

PHP: floatval - Manual

floatval

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

floatvalGet float value of a variable

Parameters
value

May be any scalar type. floatval() should not be used on objects, as doing so will emit an E_WARNING level error and return 1.

Return Values

The float value of the given variable. Empty arrays return 0, non-empty arrays return 1.

Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of float casting apply.

Changelog Version Description 8.0.0 The error level when converting from object was changed from E_NOTICE to E_WARNING. Examples

Example #1 floatval() Example

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

Example #2 floatval() non-numeric leftmost characters Example

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

brewal dot renault at gmail dot com

11 years ago

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

Anonymous

20 years ago

you can also use typecasting instead of functions:

(float) $value;

Alexey M

9 years ago

There is much easier way to deal with formatted numbers:

<?php
$str
= '13,232.95';
$var = (double)filter_var($str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
var_dump($var);
?>
double(13232.95)

PapaPinguoin

13 years ago

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");?>
anonymous at start dot be

21 years ago

Easier-to-grasp-function for the ',' problem.

<?php
function Getfloat($str) {
if(
strstr($str, ",")) {
$str = str_replace(".", "", $str); $str = str_replace(",", ".", $str); }

if(

preg_match("#([0-9\.]+)#", $str, $match)) { return floatval($match[0]);
} else {
return
floatval($str); }
}

echo

Getfloat("$ 19.332,35-"); ?>

chris at georgakopoulos dot com

16 years ago

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);
}
?>

pillepop2003 at yahoo dot de

20 years ago

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.

<?phpfunction float($str, $set=FALSE)
{
if(
preg_match("/([0-9\.,-]+)/", $str, $match))
{
$str = $match[0];

if(

strstr($str, ','))
{
$str = str_replace('.', '', $str); $str = str_replace(',', '.', $str); return floatval($str);
}
else
{
if(preg_match("/^[0-9]*[\.]{1}[0-9-]+$/", $str) == TRUE && $set['single_dot_as_decimal'] == TRUE)
{
return floatval($str);

}


else
{
$str = str_replace('.', '', $str); return floatval($str);
}
}
}

else


{
return 0;
}
}
echo float('foo 123,00 bar'); echo float('foo 123.00 bar' array('single_dot_as_decimal'=> TRUE)); echo float('foo 123.00 bar' array('single_dot_as_decimal'=> FALSE)); echo float('foo 222.123.00 bar' array('single_dot_as_decimal'=> TRUE)); echo float('foo 222.123.00 bar' array('single_dot_as_decimal'=> FALSE)); echo float('foo 123,-- bar'); ?>


Big Up.
Philipp
aa at geb-team dot de

18 years ago

@pillepop2003 at yahoo dot de

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


use: "/^[0-9-]*[\.]{1}[0-9-]+$/"
instead of: "/^[0-9]*[\.]{1}[0-9-]+$/"
steve at opilo dot net

17 years ago

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)); ?>

secretr at NOSPAM dot e107 dot org

14 years ago

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); ?>


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); var_dump($testVal, number2db($testVal));?>

Michiel

17 years ago

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>";
}
?>

pierpaolocira

8 years ago

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.

T-Soloveychik at ya.ru

8 years ago

Float value less than 0.0001 (0.0000999999999999995) will be converted by floatval to scientific notation (exponential notation):
<?php

var_dump

(floatval(0.0000999999999999995)); var_dump(floatval("0.000099")); var_dump((string)floatval(0.000099));
zfcb13 at gmail dot com

9 years ago

More elegant function with selection of decimal point (deafault ,):
<?php
function floatvaldec($v, $dec=',') { return floatval(ereg_replace("," , "." , ereg_replace("[^-0-9$dec]","",$v))); }echo '<br>'.floatvaldec('somthing123.456.789,12Euro') ;
echo
'<br>'.floatvaldec('x123,456 789.12 Euro', '.') ;
echo
'<br>'.floatvaldec('123.456 789,12$') ;
?>
Zipi

22 years ago

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)
jason at shadonet dot com

22 years ago

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.

iliyazelenkog at gmail dot com

6 years ago

(float) would be more performant here (up to 6x times faster).

intval, floatval, doubleval, strva for PHP4 functions (intval, floatval, doubleval, strval), in PHP5 use type casting construction (i.e. '(type) parameter').

leprau at leprau dot de

18 years ago

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]) == 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;
}
?>
movila dot e dot v at gmail dot com

9 years ago

<?php
$price
= '1.299,00 EUR';
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);
?>
radler63 at hotmail dot com

7 years ago

I get the following disturbing results:
var_dump string(10) "0.01333"
echo the string=0.01333
echo (float)string=0
echo floatval(string)=0

The string is an outcome of array_map('str_getcsv', file(...


I can't find the characters 8-10

thanks

info at marc-gutt dot de

16 years ago

<?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.

vickers at hotpop dot com

21 years ago

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, $i, 1);
if(
is_numeric($cstr) || $cstr == ".")
$flt = $flt.$cstr;
}
return
floatval($flt);
}
?>


Richard Vickers
vickers@hotpop.com

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4