Большинство решений здесь работают только для целых чисел. Этот также будет работать для чисел, таких как 1.5M
или 6.83K
.
Я думаю, что эта функция намного чище и эффективнее
function formatAbbreviationToNumber($number) {
$abbrevs = array(12 => "T", 9 => "B", 6 => "M", 3 => "K", 0 => "");
foreach($abbrevs as $exponent => $abbrev) {
if(strtoupper(substr($number, -1)) == $abbrev) {
return substr_replace($number, "", -1) * pow(10, $exponent);
}
}
}
И наоборот:
function formatNumbertoAbbreviation($number) {
$abbrevs = array(12 => "T", 9 => "B", 6 => "M", 3 => "K", 0 => "");
foreach($abbrevs as $exponent => $abbrev) {
if(abs($number) >= pow(10, $exponent)) {
return intval($number / pow(10, $exponent)) . $abbrev;
}
}
}
Достигается триллион, вы можете добавить более высокие значения, если хотите, но не забудьте поместить их в массив от самого высокого до самого низкого.