这是一个将数字转换为符合新国际标准的可读字符串的原型。
有两种表示大数的方法:您可以以1000 = 10 3(以10为底)或1024 = 2 10(以2为底)的倍数显示它们。如果除以1000,则可能使用SI前缀名称;如果除以1024,则可能使用IEC前缀名称。问题开始于除以1024。许多应用程序为此使用SI前缀名称,而某些应用程序使用IEC前缀名称。目前的情况一团糟。如果看到SI前缀名称,则不知道该数字是1000还是1024除
https://wiki.ubuntu.com/UnitsPolicy
http://en.wikipedia.org/wiki/Template:Quantities_of_bytes
Object.defineProperty(Number.prototype,'fileSize',{value:function(a,b,c,d){
return (a=a?[1e3,'k','B']:[1024,'K','iB'],b=Math,c=b.log,
d=c(this)/c(a[0])|0,this/b.pow(a[0],d)).toFixed(2)
+' '+(d?(a[1]+'MGTPEZY')[--d]+a[2]:'Bytes');
},writable:false,enumerable:false});
该函数不包含loop
,因此它可能比某些其他函数要快。
用法:
IEC前缀
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
SI前缀
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
我将IEC设置为默认值,因为我一直使用二进制模式来计算文件的大小...使用1024的幂
如果您只希望其中一个简短的oneliner函数:
SI
function fileSizeSI(a,b,c,d,e){
return (b=Math,c=b.log,d=1e3,e=c(a)/c(d)|0,a/b.pow(d,e)).toFixed(2)
+' '+(e?'kMGTPEZY'[--e]+'B':'Bytes')
}
//kB,MB,GB,TB,PB,EB,ZB,YB
国际电工委员会
function fileSizeIEC(a,b,c,d,e){
return (b=Math,c=b.log,d=1024,e=c(a)/c(d)|0,a/b.pow(d,e)).toFixed(2)
+' '+(e?'KMGTPEZY'[--e]+'iB':'Bytes')
}
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
用法:
console.log(fileSizeIEC(7412834521));
如果您对功能有任何疑问,请问