2012-07-22 28 views
1

这段代码读取文件的大小,但1.759864Mb文件的输出将为1Mb,我希望它是2Mb。我知道这是要改变一个小东西,但我找不到它是什么......PHP - Round number

function Size($path) 
{ 
    $bytes = sprintf('%u', filesize($path)); 
    if ($bytes > 0) 
    { 
     $unit = intval(log($bytes, 1024)); 
     $units = array('B', 'Kb', 'Mb', 'Gb'); 

     if (array_key_exists($unit, $units) === true) 
     { 
      return sprintf('%d %s', $bytes/pow(1024, $unit), $units[$unit]); 
     } 
    } 
    return $bytes; 
} 

回答

3

应该

return sprintf('%d %s', ceil($bytes/pow(1024, $unit)), $units[$unit]); 

ceil通过,如果四舍五入值返回下一个最大的整数值必要。

+0

谢谢,成功了!虽然我用圆而不是ceil。 – user495915 2012-07-22 15:49:28

+1

小心一轮,我在回答中选择了它,但选择了删除,它可以是非常有用的,但很疲惫,就好像你试图显示7.3MB的文件需要多少磁盘空间并且用户有7.0MB自由和你的程序输出7MB所需,因为它向下舍入用户将没有足够的空间。然而,如果你是安全的并且总是四舍五入(通过使用ceil),用户将始终被告知上限。 – 2012-07-22 15:52:45

+0

圆是否能够做地板以及ceil?我并不认为这是事实,我知道你可以控制它如何缩小一半,但是你不能覆盖例如7.3或7.7的默认舍入,它们总是舍入或舍弃。 – 2012-07-22 15:55:28

0
ceil($bytes/pow(1024, $unit)); 
0

我建议使用PHP round功能,而不是仅仅让sprintf做舍入(以%d):

return sprintf('%d %s', round($bytes/pow(1024, $unit)), $units[$unit]); 
+0

他正在使用ceil做四舍五入,因为看起来他总是希望下一个整数上升,这是一个很好的假设,例如,如果他试图显示需要多少磁盘空间。 – 2012-07-22 15:50:32

+0

@Jon:在上面的另一个评论中,他写道他更喜欢用'round'。 – Jocelyn 2012-07-22 15:52:31

+0

我不会看到任何这样的评论,但我看到一个标签轮,它并不意味着他想要轮功能。 – 2012-07-22 15:53:45