Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 菲律宾比索–;整数_Php_Math_Rounding - Fatal编程技术网

Php 菲律宾比索–;整数

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

这段代码读取文件的大小,但是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', '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
在必要时通过向上舍入值返回下一个最高整数值

我建议使用PHP
round
函数,而不是让
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]);