|
|
floatval (PHP 4 >= 4.2.0, PHP 5) floatval -- Get float value of a variable Описаниеfloat floatval ( mixed var )
Gets the float value of var.
Список параметров
var
May be any scalar type. You cannot use floatval()
on arrays or objects.
Возвращаемые значения
The float value of the given variable.
Примеры
Пример 1. floatval() Example |
<?php
$var = '122.34343The';
$float_value_of_var = floatval($var);
echo $float_value_of_var; ?>
|
|
leprau at leprau dot de
19-Jul-2007 09:26
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;
}
?>
aa at geb-team dot de
04-Sep-2006 08:03
@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-]+$/"
pillepop2003 at yahoo dot de
14-Dec-2004 02:38
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))
{
$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
anonymous at start dot be
15-Jun-2004 07:00
Easier-to-grasp-function for the ',' problem.
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
thorcharAThotmailDOTcom
11-Mar-2004 12:40
Please note that conversion is not always correct, if you use a , instead of a . conversion wil return an integer on most servers.
vickers at hotpop dot com
26-Jan-2004 03:45
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.
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
Zipi
25-Apr-2003 02:51
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.
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
07-Mar-2003 07:07
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.
|