1

我正在使用 PHP 显示表中的文件列表有多大。我想以兆字节而不是默认字节为单位显示它们的大小。我遇到的问题是我得到了极长的小数,这对于这个目的是不切实际的。

这是我到目前为止所拥有的:

print((filesize("../uploads/" . $dirArray[$index])) * .000000953674316 . " MB");

它正确地转换了值,但例如更改71 B6.7710876436E-5 MB.

我认为 E-5x10^-5可能会正确加起来,但是有没有办法可以切断它下降到多少个数字?如果它显示为“00.00 MB”,这对我来说很好,大多数文件将比这个测试文件大得多。

4

5 回答 5

6

您可以使用number_format()函数格式化数字。

编辑:手册页包含您可能喜欢的用户评论:http: //es.php.net/manual/en/function.number-format.php#72969

于 2011-08-28T18:38:59.873 回答
3

用好旧的printf

printf("%.2f MB",filesize("../uploads/" . $dirArray[$index]) * .000000953674316);

也许,因为它的意图更清楚一点:

printf("%.2f MB",filesize("../uploads/" . $dirArray[$index]) / (1024 * 1024));
于 2011-08-28T18:41:07.537 回答
1

number_format()很好,不要忘记round()可以将数字四舍五入到您想要的任何精度。

于 2011-08-28T18:41:05.507 回答
0

这是简单的好功能:快速PHP

于 2011-08-28T18:42:34.930 回答
0

如果你也需要其他单位,你可以使用我几年前写的这个函数:

<?php
function human_filesize($size, $precision = 2)
{
   $a_size = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
   $count  = count($a_size) - 1;
   $i = 0;
   while ($size / 1024 >= 1 && $count >= $i) {
       $size = $size / 1024;
       $i++;
   }
   return round($size, $precision) . ' ' . $a_size[$i];
}

// =========
// USAGE
// =========

// Output: 34.35 MiB
echo human_filesize(filesize('file.zip'));

// Output: 34 MiB
echo human_filesize(filesize('file.zip'), 0);

// Output: 34.35465 MiB
echo human_filesize(filesize('file.zip'), 5);
?>
于 2011-08-28T19:08:45.297 回答