小于1mb时的PHP数字格式

时间:2011-02-11 23:07:28

标签: php filesize rounding

希望有人可以解决这个问题。

我用它来显示文件夹中几个文件的文件大小...

number_format (round (filesize($currentfile) /1048576)) . "mb"

...显示我的文件名:

27MB
35MB
10mb

但是,如果filesize小于1mb,它在屏幕上显示为:

0MB

如何修改PHP,以便在遇到250k文件时,显示为“.25mb”?

提前致谢。

5 个答案:

答案 0 :(得分:3)

嗯,您需要删除round来电,它正在制作整数:

number_format (filesize($currentfile) /1048576, 2) . "mb"

这将给出:

27mb
35mb
10.25mb < if it's really 10.25mb
0.25mb

答案 1 :(得分:2)

最好创建一个功能,以便您可以在应用程序的其他位置重复使用它,然后如果您决定更改格式或稍后的某些内容,则可以在一个位置轻松完成。我确信那里有一些更优雅的东西,但为了简单起见,我刚刚掀起了一个:

function pretty_size($bytes, $dec_places = 1) {

    $total = $bytes / 1024 / 1024 / 1024 / 1024;
    $unit = 'TB';

    if( $total < 1 ) {
        $total = $bytes / 1024 / 1024 / 1024;
        $unit = 'GB';
    }

    if( $total < 1 ) {
        $total = $bytes / 1024 / 1024;
        $unit = 'MB';
    }

    if( $total < 1 ) {
        $total = $bytes / 1024;
        $unit = 'KB';
    }

    if( $total < 1 ) {
        $total = $bytes;
        $unit = 'bytes';
    }

    return array(number_format($total, $dec_places), $unit);

}

您可以使用以下方法对其进行测试:

$numbers = array(
    89743589734434,
    39243243223,
    3456544,
    12342443,
    324324,
    4233,
    2332,
    32
);

foreach( $numbers as $n ) {
    $size = pretty_size($n);
    echo $size[0] . ' ' . $size[1] . '<br />';
}

上面的代码将产生这个:

81.6 TB
36.5 GB
3.3 MB
11.8 MB
316.7 KB
4.1 KB
2.3 KB
32.0 bytes

当然,如果您真的想将显示限制为仅几兆字节,则可以相应地更改功能。很容易:)

答案 2 :(得分:1)

更强大:

function fsize_fmt($bytes, $precision=2) {
    $unit = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    for ($x=0; $bytes>=1024 && $x<count($unit); $x++) { $bytes /= 1024; }
    return round($bytes, $precision) . ' ' . $unit[$x];
}

答案 3 :(得分:0)

嗯,你只需要检查它是否低于1MB并以不同的方式处理它。

number_format (filesize($currentfile) / 1048576, (filesize($currentfile) < 1048576 ? 2 : 0)) . "mb"

答案 4 :(得分:0)

if((filesize($currentfile) /1048576) >= 1)
    number_format (round (filesize($currentfile) /1048576), 1) . "mb";
else
    number_format (filesize($currentfile) /1048576, 2) . "mb"