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) 就完美了。
按照这种思路得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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); } } |
试下先
1 2 | 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
1 2 3 4 5 6 7 8 | 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
1 2 3 4 5 6 7 | 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
1 2 3 4 5 6 7 8 | 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