Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Матем. функция в PHP


Автор: ldobr 19.12.2006, 17:15
Здраствуйте. 

В PHP не новичок, но вот случилось следующее.

Я получаю размер файла. Он соотвецтвенно выводится в байтах, а мне надо, чтобы было в мегобайтах.

Пример:

Файл весит 8 372 451 байт, то есть 8 372 килобайта, и соотвецтвенно 8,4 Мегобайта (Обратите внимание, что оставлена одна цифра после запятой).

PHP мне выдает вес файла в байтах, а мне надо, чтобы было в мегобайтах, да еще и с одной цифрой после запятой.

Да! И еще ... если файл будет весить меньше одного мегобайта, то вывести так 0,2 Mb.

--------------------------------------------------------------------
В моих книгах, подобное не описано. Я думаю, что это можно сделать с помощью математических манипуляций, но сообразить не могу.
Заранее спаибо.

Автор: szz 19.12.2006, 17:33
ну вот.. это ж просто. Примерно так - не проверял, так что если есть ошибки - подправь
Код

function __approx_round($v){
    return round($v*10)/10;
}
function friendly_file_size($size){
  if($size<1024) return $size.' b';
  if($size<1024*100) return __approx_round($size/1024).' Kb';
  return __approx_round($size/(1024*1024)).' Mb';
}


Добавлено @ 17:35 
И еще: 8 372 451 байт это не 8,4 Мегабайт, а 
8 372 451 / 1024 / 1024 = 7.98 Мегабайт

Автор: Wolf1994 19.12.2006, 18:31
У меня есть готовая функция:

Код

function get_sizeform ($t)
{
 if ( strval (intval ($t))==$t )
 {
  $t_ar=array ("Кб", "Мб", "Гб", "Тб");
  $n=floor ((strlen ($t)-1)/3);
  $r=$t/pow (1024, $n);
  $r=round ($r, $n)." ".$t_ar [$n];
  return $r;
 }
 else
  return $t;
}


Не совсем то, что нужно, но может пригодится.

Автор: szz 19.12.2006, 18:33
все точно, только нужно сделать поправку для 0.1 - 0.9 Мега. У тебя ж будет показывать 100-900 кило smile

Автор: Mal Hack 19.12.2006, 18:40
Код
  function mod_get_filesize_as_string( $filesize ) 
   {
    if( $filesize < 1024 )
     {  return $filesize . " b";  }
    elseif( $filesize < 1048576 ) 
     {  return round( ( $filesize / 1024 ) , 2 ) . " Kb";  }
    elseif( $filesize < 1073741824 ) 
     {  return round( ( $filesize / 1048576 ) , 2 ) . " Mb";  }
    elseif( $filesize < 1099511627776 ) 
     {  return round( ( $filesize / 1073741824 ) , 2 ) . " Gb";  }
    else
     {  return round( ( $filesize / 1099511627776 ) , 2 ) . " Tb";  }
   }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)