İşte bir sayıyı yeni uluslararası standartlara uygun olarak okunabilir bir dizgeye dönüştüren bir prototip.
Büyük sayıları temsil etmenin iki yolu vardır: Bunları 1000 = 10 3 (taban 10) veya 1024 = 2 10 (taban 2) 'nin katları olarak görüntüleyebilirsiniz. 1000'e bölerseniz muhtemelen SI önek adlarını kullanırsınız, 1024'e bölerseniz muhtemelen IEC önek adlarını kullanırsınız. Sorun 1024'e bölünmeyle başlar. Birçok uygulama bunun için SI önek isimlerini, bazıları ise IEC önek isimlerini kullanır. Mevcut durum bir karmaşa. SI ön ek adlarını görürseniz, sayının 1000 veya 1024'e bölünüp bölünmediğini bilmiyorsunuz
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});
Bu işlev hayır içerir loop
ve bu nedenle muhtemelen diğer bazı işlevlerden daha hızlıdır.
Kullanımı:
IEC öneki
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
SI öneki
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
her zaman bir dosyanın boyutunu hesaplamak için ikili modu kullandığım için IEC'yi varsayılan olarak ayarladım ... 1024'ün gücünü kullanarak
Bunlardan birini kısa bir oneliner işlevinde istiyorsanız:
Sİ
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
Kullanımı:
console.log(fileSizeIEC(7412834521));
fonksiyonlar hakkında sorularınız varsa,