将从php中的$_FILES[size]中获取的文件值四舍五入

将从php中的$_FILES[size]中获取的文件值四舍五入,php,Php,我需要汇总上传文件的大小,并确定大小格式是kb、mb还是gb 详情: 用户上传图片时,图片属性通过全局$\文件获取。例如,如果一个用户上传了一张29.6kb的图片,而我决定检查上传图片的大小,则$u FILES[size]数组会回显大小为30358 我试图用$_FILES[size]得到的值将图片大小从30758四舍五入到31,然后将文件大小格式(kb、mb或gb)连接到它,并将其作为31kb进行回显 我真的希望能得到帮助…谢谢 那是怎么回事 $file = $_FILES[size]; $s

我需要汇总上传文件的大小,并确定大小格式是kb、mb还是gb

详情: 用户上传图片时,图片属性通过全局$\文件获取。例如,如果一个用户上传了一张29.6kb的图片,而我决定检查上传图片的大小,则$u FILES[size]数组会回显大小为30358

我试图用$_FILES[size]得到的值将图片大小从30758四舍五入到31,然后将文件大小格式(kb、mb或gb)连接到它,并将其作为31kb进行回显

我真的希望能得到帮助…谢谢

那是怎么回事

$file =  $_FILES[size];
$s = 'kb';
$x = round($file/1000, 1);
if($x > 1000){ 
    $x = $x/1000;
    $s = 'mb';
} else if($x > 100000) {
    $x = $x/100000;
    $s = 'gb';
}
echo $x . ' ' . $s;

您可以使用php命令round(float)和一些简单的数学运算来实现这一点:

define("K",1024);
define("M",1048576);
define("G",1073741824);

$size = $_FILES[size];
$gigs = $size / G;
$megs = ($size - ($gigs * G)) / M;
$kils = ($size - ($gigs * G) - ($megs * M)) / K;

if($gigs > 0) echo(round($gigs));
elseif($megs > 0) echo(round($megs));
elseif($kils > 0) echo(round($kils));
else echo("Size is zero");
使用此辅助函数:

function get_file_size($size)
{
  $units = array('Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB');
  return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2).' '.$units[$i];
}
*来源


我还没有看到一种更优雅的方法来做这件事。

您应该提供您迄今为止尝试过的方法