Ecco un prototipo per convertire un numero in una stringa leggibile rispettando i nuovi standard internazionali.
Esistono due modi per rappresentare numeri grandi: è possibile visualizzarli in multipli di 1000 = 10 3 (base 10) o 1024 = 2 10 (base 2). Se dividi per 1000, probabilmente usi i nomi dei prefissi SI, se dividi per 1024, probabilmente usi i nomi dei prefissi IEC. Il problema inizia con la divisione per 1024. Molte applicazioni usano i nomi dei prefissi SI e alcuni usano i nomi dei prefissi IEC. La situazione attuale è un casino. Se vedi i nomi dei prefissi SI non sai se il numero è diviso per 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});
Questa funzione non contiene loop
, e quindi probabilmente è più veloce di alcune altre funzioni.
Uso:
Prefisso IEC
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
Prefisso SI
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
ho impostato IEC come predefinito perché ho sempre usato la modalità binaria per calcolare la dimensione di un file ... usando la potenza di 1024
Se vuoi solo uno di loro in una breve funzione di linea:
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));
se hai qualche domanda sulle funzioni basta chiedere