场景:各种文件的大小以字节为单位存储在数据库中。将此大小信息格式化为千字节、兆字节和千兆字节的最佳方式是什么?例如,我有一个Ubuntu显示为“5.2MB (5445632字节)”的MP3。我如何在网页上将其显示为“5.2MB”,并使小于1MB的文件显示为KB,而1G以上的文件显示为GB?
发布于 2010-03-25 02:38:43
function formatBytes($bytes, $precision = 2) {
$units = array('B', 'KB', 'MB', 'GB', 'TB');
$bytes = max($bytes, 0);
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
$pow = min($pow, count($units) - 1);
// Uncomment one of the following alternatives
// $bytes /= pow(1024, $pow);
// $bytes /= (1 << (10 * $pow));
return round($bytes, $precision) . ' ' . $units[$pow];
}
(取自php.net,还有许多其他示例,但我最喜欢这个:-)
发布于 2010-03-25 02:49:36
这是Chris Jester-Young的实现,我见过的最干净的,结合了php.net的和一个精确的参数。
function formatBytes($size, $precision = 2)
{
$base = log($size, 1024);
$suffixes = array('', 'K', 'M', 'G', 'T');
return round(pow(1024, $base - floor($base)), $precision) .' '. $suffixes[floor($base)];
}
echo formatBytes(24962496);
// 23.81M
echo formatBytes(24962496, 0);
// 24M
echo formatBytes(24962496, 4);
// 23.8061M
发布于 2010-03-25 02:39:27
伪码:
$base = log($size) / log(1024);
$suffix = array("", "k", "M", "G", "T")[floor($base)];
return pow(1024, $base - floor($base)) . $suffix;
https://stackoverflow.com/questions/2510434
复制相似问题