这是一个将数字转换为可读字符串的原型,遵循新的国际标准。
有两种表示大数值的方法:你可以将它们显示成1000的倍数= 10 3(基于十进制),或者1024的倍数= 2 10(基于二进制)。如果你除以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});
这个函数不包含任何循环
,所以它可能比其他一些函数更快。
用法:
IEC 前缀
console.log((186457865).fileSize());
国际单位制前缀
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
我将IEC设置为默认值,因为我总是使用二进制模式计算文件大小...利用1024的幂
如果您只想在一个简短的一行函数中使用它们之一:
国际单位制(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
IEC
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));
如果您对这些功能有任何问题,请随时提问。
1.445281982421875
,正确地四舍五入为1.4。 - mpen