Aquí hay un prototipo para convertir un número en una cadena legible respetando los nuevos estándares internacionales.
Hay dos formas de representar números grandes: puede mostrarlos en múltiplos de 1000 = 10 3 (base 10) o 1024 = 2 10 (base 2). Si divide por 1000, probablemente use los nombres de prefijo SI, si divide por 1024, probablemente use los nombres de prefijo IEC. El problema comienza con la división por 1024. Muchas aplicaciones usan los nombres de prefijos SI y algunas usan los nombres de prefijos IEC. La situación actual es un desastre. Si ve nombres de prefijos SI, no sabe si el número está dividido entre 1000 o 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});
Esta función no contiene loop
, por lo que probablemente sea más rápida que otras funciones.
Uso:
Prefijo IEC
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
Prefijo SI
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
configuré el IEC como predeterminado porque siempre usé el modo binario para calcular el tamaño de un archivo ... usando la potencia de 1024
Si solo quieres uno de ellos en una función de línea corta:
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
Uso:
console.log(fileSizeIEC(7412834521));
si tiene alguna pregunta sobre las funciones solo pregunte