View Full Version : getting an international number from a string
The Geek
02-21-2006, 04:59 PM
Hey gurus, can anyone shed some light on how to take a string and turn it into a float? The catch is that I need to take into considerations the users international prefs like using a comma for decimal separator and a decimal for thousands separator versus the standard English version which is opposite to that.
The user may enter:
1999
or 1999.49
or 1999,49
or 1,999.49
or 1.999,49
or 1,999.5
How can I translate this to 1999.00, 1999.49 and 1999.50 respectively?
Thanks
calorie
02-21-2006, 05:07 PM
Try number_format (http://www.php.net/manual/en/function.number-format.php):
$variable = '5,25';
if (strpos($variable, ','))
{
$variable = str_replace(array('.',','), array('','.'), $variable);
}
$variable = number_format($variable, 2, '.', '');
The Geek
02-21-2006, 05:37 PM
Thanks, just tried it and here are my results:
1,234.56 = 1.00
1234.56 = 1,234.56
1234.5 = 1,234.50
1,234.5 = 1.00
1,2345 = 1.00
1234,56 = 1,234.00
1234,5 = 1,234.00
1.234,56 = 1.23
1.234,5 = 1.23
The problem is that I dont know how the user is entering the data unless there is some way I can grab that info from vb :(
EDIT: Hold on, you just changed your post ;) Let me check it out now
Ok. The problem with the above is if someone enters 1,345.5 it will give me 1.3345.5 ;)
BTW: Thanks for your time!
BTW: Here are my revised figures based on number_format($var, 2, '.','')
1,234.56 = 1.00
1234.56 = 1234.56
1234.5 = 1234.50
1,234.5 = 1.00
1,2345 = 1.00
1234,56 = 1234.00
1234,5 = 1234.00
1.234,56 = 1.23
1.234,5 = 1.23
calorie
02-21-2006, 05:42 PM
Yeah, I see, working on a new one. ;)
Okay, try the below, both with and without the following commented:
// $locale_info['decimal_point'] = ',';
Depending on your $locale_info['decimal_point'] it should work one way but not the other.
<?php
$variables = array(
'1999',
'1999.49',
'1999,49',
'1,999.49',
'1.999,49',
'1,999.5'
);
$locale_info = localeconv();
foreach ($variables AS $variable)
{
// $locale_info['decimal_point'] = ',';
$variable_orig = $variable;
if ($locale_info['decimal_point'] == ',')
{
$variable = str_replace(array('.',','), array('','.'), $variable);
}
else
{
$variable = str_replace(',', '', $variable);
}
$variable = sprintf("%01.2f", $variable);
echo $variable_orig.' => '.$variable."\n<br />\n";
}
?>
With $locale_info['decimal_point'] commented (my decimal point is period):
1999 => 1999.00
1999.49 => 1999.49
1999,49 => 199949.00 XX
1,999.49 => 1999.49
1.999,49 => 2.00 XX
1,999.5 => 1999.50
With $locale_info['decimal_point'] UNcommented (my decimal point now comma):
1999 => 1999.00
1999.49 => 199949.00 XX
1999,49 => 1999.49
1,999.49 => 2.00 XX
1.999,49 => 1999.49
1,999.5 => 2.00 XX
So it depends on the $locale_info['decimal_point'] setting.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.