java php js 转换字节单位
存储单位/文件大小 转如何和转B KB MB GB TB
bit是最小的存储单位,1字节为8位二进制数。
1Byte = 8bit,被称一个存储元。
以下为换的公式
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
应用场景在哪里
开发人员需要把文件大小和存储空间显示给用户看等的时候,
常常把存储占用空间的长度long字节,换算为更好看和容易识别的或者说是用户体验更好表示方法。
那么怎么去转换呢
假设长度:5242880字节
多少KB = 5242880/1024
多少MB = 5242880/1024/1024
.....
以此类推
那代码很显然
if(5242880 < 1024)
return B
else if(5242880 < 1024 * 1024)
return KB
....
再配合简单四射五入 System.format("%.2f", x) 就完美了。
按照这种思路得
public static String formatBytes(long size) {
if(size==0)
return "0B";
long kb = 1024;
long mb = kb * kb;
long gb = mb * kb;
long tb = gb * kb;
if(size < kb) {
return String.format("%d B", size);
}else if(size < mb){
float f = (float) size / kb;
return String.format("%.2f KB", f);
}else if(size < gb){
float f = (float) size / mb;
return String.format("%.2f MB", f);
}else if(size < tb){
float f = (float) size / gb;
return String.format("%.2f GB", f);
}else{
float f = (float) size / tb;
return String.format("%.2f TB", f);
}
}试下先
System.out.println(formatBytes(22132233342221322L)) //输出:20129.15 TB
可以使用了。
这样太臃肿了,重复也多
能有更为简洁的转换B KB MB GB TB办法吗?
方法总是有的,只要你想的到。
不知道是哪位大神想出来的,前人种树后人乘凉。
前人的办法是定义各个单位的数组,然后取绝对值(因为用可能需要用到负值)。
很巧妙地,一直for循环长度除以1024,直到合长度小于1024临界 或 循环次数大于等于单位长度-1 停止。
这样得到了 最大单位的数值 和 单位数组位置下标 i。
当然可能不是最好办法,但足够用了。
记得还有人用了 Math.log() 和 Math.pow() 的办法也很棒,数学大神,
但是办法归办法,万变不离其中,有时候原始的东西也很美妙,直观不会出错。
按照这种思路翻译了各个版本代码:
JAVA版文件大小转B KB MB GB TB
public static String formatBytes(long size){
char[] units = {'B','K','M','G','T'};
float resize = Math.abs(size);
int i = 0;
for(; resize >= 1024 && i < 4;i++)
resize /= 1024;
return ((resize<0)?"-":"") + String.format("%.2f"+units[i], resize);
}PHP版文件大小转B KB MB GB TB
function formatBytes($size) {
$units = array('B','K','M','G','T');
$size = abs($size);
for($i = 0; $size >= 1024 && $i < 4; $i++)
$size /= 1024;
return (($size<0)?'-':'') . round($size, 2) . $units[$i];
}JS版文件大小转B KB MB GB TB
function formatBytes(size){
var units = ['B','K','M','G','T'];
size = Math.abs(size);
var i = 0;
for(;size >= 1024 && i < 4; i++)
size /= 1024;
return ((size<0)?'-':'') + size.toFixed(2) + units[i];
}打完收工,不对请指出哈。
原创文章,转载请注明出处:https://www.weizhixi.com/article/39.html
