Hier ist ein Prototyp zur Umwandlung einer Zahl in eine lesbare Zeichenkette, die den neuen internationalen Standards entspricht.
Es gibt zwei Möglichkeiten, große Zahlen darzustellen: Man kann sie entweder anzeigen in Vielfachen von 1000 = 10 3 (Basis 10) oder 1024 = 2 10 (Basis 2). Wenn man durch 1000 teilt, verwendet man wahrscheinlich die SI-Präfixnamen, wenn man durch 1024 dividiert, verwendet man wahrscheinlich die IEC-Präfixnamen. Das Problem beginnt mit der Division durch 1024. Viele Anwendungen verwenden die SI-Präfixe Namen und einige verwenden die IEC-Präfix-Namen. Die derzeitige Situation ist ein Durcheinander. 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 keine 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 IEC als Standard eingestellt, weil ich immer den Binärmodus zur Berechnung der Dateigröße verwendet habe... mit der Potenz von 1024
Wenn Sie nur einen von ihnen in einer kurzen Oneliner-Funktion benötigen:
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