Этот фрагмент написан на PHP, и он основан на некотором примере, который кто-то еще имел на своем веб-сайте (извините, приятель, я не помню).
Основная концепция вместо использования if, использовать цикл.
function formatNumberThousands($a,$dig)
{
$unim = array("","k","m","g");
$c = 0;
while ($a>=1000 && $c<=3) {
$c++;
$a = $a/1000;
}
$d = $dig-ceil(log10($a));
return number_format($a,($c ? $d : 0))."".$unim[$c];
}
Вызов number_format () является библиотечной функцией PHP, которая возвращает строку с запятыми между тысячами групп. Я не уверен, существует ли что-то подобное в perl.
Параметр $ dig устанавливает ограничение на количество отображаемых цифр. Если $ dig равен 2, он даст вам 1.2k из 1237.
Для форматирования байтов просто разделите на 1024.
Эта функция используется в некоторых производственных кодах по сей день.