首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将字节格式化为千字节、兆字节、千兆字节

将字节格式化为千字节、兆字节、千兆字节
EN

Stack Overflow用户
提问于 2010-03-25 02:34:56
回答 25查看 213.8K关注 0票数 206

场景:各种文件的大小以字节为单位存储在数据库中。将此大小信息格式化为千字节、兆字节和千兆字节的最佳方式是什么?例如,我有一个Ubuntu显示为“5.2MB (5445632字节)”的MP3。我如何在网页上将其显示为“5.2MB”,并使小于1MB的文件显示为KB,而1G以上的文件显示为GB?

EN

回答 25

Stack Overflow用户

回答已采纳

发布于 2010-03-25 02:38:43

代码语言:javascript
复制
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,还有许多其他示例,但我最喜欢这个:-)

票数 348
EN

Stack Overflow用户

发布于 2010-03-25 02:49:36

这是Chris Jester-Young的实现,我见过的最干净的,结合了php.net的和一个精确的参数。

代码语言:javascript
复制
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
票数 224
EN

Stack Overflow用户

发布于 2010-03-25 02:39:27

伪码:

代码语言:javascript
复制
$base = log($size) / log(1024);
$suffix = array("", "k", "M", "G", "T")[floor($base)];
return pow(1024, $base - floor($base)) . $suffix;
票数 96
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2510434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档