Voting

: min(three, seven)?
(Example: nine)

The Note You're Voting On

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.

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

<< Back to user notes page

To Top