note 111552 added to function.number-format
| From: | tomislav at firmus-grupa dot hr | Date: | Sun, 03 Mar 2013 17:01:25 +0000 |
| Subject: | note 111552 added to function.number-format | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-193785@lists.php.net to get a copy of this message | ||
When apply number_format on number with separator on thousands, result is wrong. This function
accept number of any format
<?php
function format_price($number,$decPlaces,$decSep,$thouSep){
//$number - number for format
//$decPlaces - number of decimal places
//$decSep - separator for decimals
//$thouSep - separator for thousands
//first remove all white spaces
$number=preg_replace('/\s+/', '',$number);
//split string into array
$numberArr = str_split($number);
//reverse array and not preserve key, keys will help to find decimal place
$numberArrRev=array_reverse($numberArr);
//find first occurrence of non number character, that will be a decimal place
//store $key into variable $decPointIsHere
foreach ($numberArrRev as $key => $value) {
if(!is_numeric($value)){
if($decPointIsHere==""){
$decPointIsHere=$key;
}
}
}
//decimal comma or whatever it is replace with dot
//$decPointIsHere is the key of the element that will contain decimal separator dot
if($decPointIsHere!=""){
$numberArrRev[$decPointIsHere]=".";
}
//again check through array for non numerical characters but skipping allready processed keys
//if is not number remove from array
foreach ($numberArrRev as $key => $value) {
if(!is_numeric($value) && $key>$decPointIsHere){
unset($numberArrRev[$key]);
}
}
//reverse back, at the start reversed array $numberArrRev to $numberArr
$numberArr=array_reverse($numberArrRev);
//create string from array
$numberClean=implode("",$numberArr);
// apply php number_format function
return number_format($numberClean,$decPlaces,$decSep,$thouSep);
}
echo format_price("1 225 552, 55",2,',',' ')."<br>";
echo format_price("1.225.552, 55",2,',',' ')."<br>";
echo format_price("1'225'552. 55",2,',','
')."<br>";
echo format_price("1225552.55",2,',',' ')."<br>";
?>
all results are: 1 225 552,55
----
Server IP: 69.147.83.199
Probable Submitter: 93.137.176.251
----
Manual Page -- http://php.net/manual/en/function.number-format.php
Edit -- https://master.php.net/note/edit/111552
Del: integrated -- https://master.php.net/note/delete/111552/integrated
Del: useless -- https://master.php.net/note/delete/111552/useless
Del: bad code -- https://master.php.net/note/delete/111552/bad+code
Del: spam -- https://master.php.net/note/delete/111552/spam
Del: non-english -- https://master.php.net/note/delete/111552/non-english
Del: in docs -- https://master.php.net/note/delete/111552/in+docs
Del: other reasons-- https://master.php.net/note/delete/111552
Reject -- https://master.php.net/note/reject/111552
Search -- https://master.php.net/manage/user-notes.php