Hier ist ein Prototyp, um eine Zahl in eine lesbare Zeichenfolge umzuwandeln, die den neuen internationalen Standards entspricht.
Es gibt zwei Möglichkeiten, große Zahlen darzustellen: Sie können sie entweder in Vielfachen von 1000 = 10 3 (Basis 10) oder 1024 = 2 10 (Basis 2) anzeigen. Wenn Sie durch 1000 teilen, verwenden Sie wahrscheinlich die SI-Präfixnamen. Wenn Sie durch 1024 teilen, verwenden Sie wahrscheinlich die IEC-Präfixnamen. Das Problem beginnt mit der Division durch 1024. Viele Anwendungen verwenden dafür die SI-Präfixnamen und einige die IEC-Präfixnamen. Die aktuelle Situation ist ein Chaos. Wenn Sie SI-Präfixnamen sehen, wissen Sie nicht, ob die Zahl durch 1000 oder 1024 geteilt wird
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});
Diese Funktion enthält no loop
und ist daher wahrscheinlich schneller als einige andere Funktionen.
Verwendung:
IEC-Präfix
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
SI-Präfix
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
Ich habe die IEC als Standard festgelegt, weil ich immer den Binärmodus verwendet habe, um die Größe einer Datei zu berechnen ... mit der Leistung von 1024
Wenn Sie nur eine davon in einer kurzen Oneliner-Funktion haben möchten:
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
Verwendung:
console.log(fileSizeIEC(7412834521));
Wenn Sie Fragen zu den Funktionen haben, fragen Sie einfach