Oto prototyp służący do konwersji liczby na czytelny ciąg zgodny z nowymi standardami międzynarodowymi.
Istnieją dwa sposoby przedstawiania dużych liczb: Możesz wyświetlić je w wielokrotnościach 1000 = 10 3 (podstawa 10) lub 1024 = 2 10 (podstawa 2). Jeśli dzielisz przez 1000, prawdopodobnie używasz nazw prefiksów SI, jeśli dzielisz przez 1024, prawdopodobnie używasz nazw prefiksów IEC. Problem zaczyna się od podzielenia przez 1024. Wiele aplikacji używa do tego nazw prefiksów SI, a niektóre używają nazw prefiksów IEC. Obecna sytuacja to bałagan. Jeśli widzisz nazwy prefiksów SI, nie wiesz, czy liczba jest podzielona przez 1000, czy 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});
Ta funkcja nie zawiera loop
, a więc jest prawdopodobnie szybsza niż niektóre inne funkcje.
Stosowanie:
Prefiks IEC
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
Prefiks SI
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
ustawiłem IEC jako domyślny, ponieważ zawsze korzystałem z trybu binarnego, aby obliczyć rozmiar pliku ... używając mocy 1024
Jeśli chcesz tylko jeden z nich w krótkiej funkcji oneliner:
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
Stosowanie:
console.log(fileSizeIEC(7412834521));
jeśli masz jakieś pytania dotyczące funkcji, po prostu zapytaj