これは、数値を新しい国際標準に準拠した読み取り可能な文字列に変換するプロトタイプです。
大きな数を表す方法は2つあります。1000= 10 3(base 10)または1024 = 2 10(base 2)の倍数で表示できます。1000で除算する場合は、おそらくSIプレフィックス名を使用し、1024で除算する場合は、おそらくIECプレフィックス名を使用します。問題は1024で除算することから始まります。多くのアプリケーションはSIプレフィックス名を使用し、一部はIECプレフィックス名を使用しています。現在の状況は混乱しています。SIプレフィックス名が表示される場合、その数が1000で割られているのか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});
この関数にはが含まれていないloop
ため、おそらく他のいくつかの関数よりも高速です。
使用法:
IEC接頭辞
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
SI接頭辞
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
常にバイナリモードを使用してファイルのサイズを計算するため、IECをデフォルトとして設定しています... 1024の累乗を使用しています
短いoneliner関数でそれらの1つだけが必要な場合:
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
使用法:
console.log(fileSizeIEC(7412834521));
関数について質問がある場合は、