2012-07-22 55 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