Php 菲律宾比索–;整数
这段代码读取文件的大小,但是1.759864Mb文件的输出将是1Mb,我希望它是2Mb。我知道这是关于改变一件小事,但我找不到它是什么Php 菲律宾比索–;整数,php,math,rounding,Php,Math,Rounding,这段代码读取文件的大小,但是1.759864Mb文件的输出将是1Mb,我希望它是2Mb。我知道这是关于改变一件小事,但我找不到它是什么 function Size($path) { $bytes = sprintf('%u', filesize($path)); if ($bytes > 0) { $unit = intval(log($bytes, 1024)); $units = array('B', 'Kb', 'Mb', 'G
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;
}
应该是
return sprintf('%d %s', ceil($bytes / pow(1024, $unit)), $units[$unit]);
ceil
在必要时通过向上舍入值返回下一个最高整数值 我建议使用PHPround
函数,而不是让sprintf
进行舍入(使用%d):
ceil($bytes / pow(1024, $unit));
他使用ceil进行舍入,因为看起来他总是希望下一个整数向上,例如,如果他试图显示需要多少磁盘空间,这是一个很好的假设。@Jon:在上面的另一个评论中,他写道,他更喜欢使用
舍入;我看不到任何这样的评论,但是我确实看到了一个要舍入的标签,这并不一定意味着他想要舍入功能。我指的是你回复的评论。我不会总是直截了当地说你必须在清楚的时候使用一些东西,这样人们就不会总是想到后果。对于文件大小,如果要向用户输出,我将始终使用ceil。我决不会放弃。同样地,对于磁盘空间,我将始终使用地板,从不使用圆形。请小心使用圆形,我的答案中有圆形,但选择删除,它可能非常有用,但如果您试图显示一个7.3MB的文件需要多少磁盘空间,而用户有7.0MB的空闲空间,并且您的程序输出7MB的所需空间,则可能会感到厌倦,因为这会使用户没有足够的空间。但是,如果您是安全的,并且总是进行取整(通过使用ceil),则用户将始终被告知上限。取整是否能够进行地板和ceil?我不认为是这样,我知道你可以控制它如何对半取整,但是你不能覆盖默认的取整,例如7.3或7.7,它们将始终分别向下或向上取整。@JonTaylor你是对的,它会向上和向下取整。我的评论有点误导。
return sprintf('%d %s', round($bytes / pow(1024, $unit)), $units[$unit]);