note 118781 deleted from function.number-format by crell
| From: | crell@php.net | Date: | Tue, 12 Apr 2022 01:08:54 +0000 |
| Subject: | note 118781 deleted from function.number-format by crell | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-218215@lists.php.net to get a copy of this message | ||
Note Submitter: vlad at blox dot ru
----
This function is used for reformatting already formatted numbers.
<?php
function formatNumber($number, $format=[], $oldDecimalSeparator=",.·'",
$multiplier=1)
{
/**
$format â the array of formatting options, details in the example.
$oldDecimalSeparator â decimal separator used in the $number. If the separator can meet
different characters, then you need to record them all, for example: ',.'.
$multiplier â typically used to adjust prices up or down.
*/
if ($format) {
$format += ['numOfDecimals' => 0, 'decimalSeparator' =>
'.', 'thousandSeparator' => '']; # Default format
# Find decimal separator
# The decimal separator is the one that is the last and does not occur more than once
if ($letters = str_replace(' ', '', $number)) { # Replace spaces
if ($letters = preg_replace('/^-/', '', $letters)) { # Remove minus
if ($letters = preg_replace('/[0-9]/', '', $letters)) { # Get
all non digits
$lastletter = substr($letters, -1); # Returns last char
if (substr_count($letters, $lastletter) == 1) {
if (strpos($oldDecimalSeparator, $lastletter) !== false)
$oldDecimalSep = $lastletter;
else
return $number;
}
}
}
}
$number = preg_replace('/[^0-9-]/', '', $number); # Remove all non
digits except 'minus'
if ($oldDecimalSep)
$number = str_replace($oldDecimalSep, '.', $number); # Format to float
if ($multiplier != 1)
$number = $number * $multiplier;
# Convert float to new format
$number = number_format($number,
$format['numOfDecimals'],
$format['decimalSeparator'],
$format['thousandSeparator']
);
}
return $number;
}
/**
Example. Formatting data in which the decimal separator can occur as the comma and dot. Formatting
into Russian format: -12 345,67
*/
echo formatNumber($number, [
'numOfDecimals' => 2,
'decimalSeparator' => ',',
'thousandSeparator' => ' '
], ',.');
?>