php сокращенные числа с K / M - PullRequest
       16

php сокращенные числа с K / M

0 голосов
/ 02 августа 2011

Функция ниже находит число, округляет его и ставит K или M в конце его

IE: 25000 становится 25K

function abbr_no($number) {
 $number  = preg_replace('/[^0-9]/', '', $number);
 $numbers = array('', 'K', 'M');
if ($number == 0) { 
 return('n/a'); 
 } else {
 return (round($number/pow(10000, ($i = floor(log($number, 10000)))), 0) . $numbers[$i]);
 }
}

и поэтому в основном делает то, чтоЯ хочу, но, как и для числа типа 389345 , оно округляется и выплевывается 39K (как и должно быть), однако мне бы хотелось, чтобы результат был 398K (3-значное число)

Теперь в последней обратной строке:

0) . $numbers[$i]);

, если я изменю 0 на 1, результатом станет 39,8K , но снова яЯ не хочу десятичную точку, поэтому я застрял и врезался в кирпичную стену

Как всегда, вся помощь приветствуется и заранее благодарим.

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Это позволяет вам переводить на все виды шкал,

function humanize($val, $postfix)
{
    foreach ($postfix as $p=>$div) {
        $t=round($val/$div) . $p;
        if (strlen($t)<(3+strlen($p))) {
            break;
        }
    }
    return trim($t);
}

например

$postfix=array(''=>1, 'K'=>1000,'M'=>1000000,'B'=>1000000000);

Чтобы ответить на исходный вопрос,

$postfix=array('walnut' => 0.16, 'chicken egg'=>0.35, 
    'grapefruit' => 1, 'bulgarian airbag' => 1.1,
    'bulgarian funbag'=>3.27, 'football' => 11.07, 
    'olympic swim pool' => 4780114, 'known universe'=>1.17456E4933);

Стервятник центральных мер и весов советского стандарта объема.

0 голосов
/ 02 августа 2011

без редактирования большей части вашего кода вы можете добавить дополнительный оператор if проверить, если модульное деление на 1 yournumber% 1

($i = floor(log($number, 10000)))), 0) % 1

дает 0 если нет, то

умножьте ваше число на 10 (вы можете сделать это в операторе while, чтобы оно умножилось на 10, пока после десятичной запятой не будет пробелов)

затем верните это число

так что если вы используете ваш_номер как 39.8 в качестве примера, он будет выглядеть следующим образом

while(your_number%1 != 0){
 your_number*=10;
}
return your_number;

Это быстрое исправление, но это определенно не лучший способ кодировать это

...