@Diversia

Как округлять числа до K, M, B?

Подскажите пожалуйста, как сделать, чтобы при числе 1045 выводилось не "1,0K", а "1К", а при 1050 - "1,1К" и т.д. Чтобы в конце не было "...,0". Без регулярных выражений для быстрого выполнения.
1045 - 1K
1050 - 1,1K
5045 - 5K
5060 - 5,1K
...
function formatToHuman($n = 0, $d = 1)
{
    if ($n == 0)    {
        return;
    }    elseif ($n < 1000) {
         return sprintf('%d', $n);
    }    elseif ($n < 1000000) {
        return number_format($n / 1000, $d, ',', '') . 'K';
    }    elseif ($n >= 1000000 && $n < 1000000000) {
        return number_format($n / 1000000, $d, ',', '') . 'M';
    }    elseif ($n >= 1000000000 && $n < 1000000000000) {
        return number_format($n / 1000000000, $d, ',', '') . 'B';
    }

    return sprintf('%d%s', floor($n / 1000000000000), 'T+');    
}

sandbox.onlinephpfunctions.com/code/5d1d8fe14bb982...

update
Это число для показа кол-ва лайков, не Кб, Мб, Тб.
  • Вопрос задан
  • 225 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Начнем с того, что K, M, B - это степени не 10, а 2.

Ну и надо все-таки немножечко учиться программированию.
То есть нахождению закономерностей и алоритмизации их.

function formatToHuman($n = 0, $d = 1)
{
    $abbr = ['','K','M','G','T'];
    foreach($abbr as $letter) {
        if ($n < 1024) {
            break;
        }
        $n = $n / 1024;
    }
    return floatval(round($n,$d)).$letter;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект