Ось прототип для перетворення числа на читабельну рядок з дотриманням нових міжнародних стандартів.
Є два способи представити великі числа: Ви можете або відобразити їх у кратних значеннях 1000 = 10 3 (основа 10) або 1024 = 2 10 (основа 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:
СІ
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));
якщо у вас є якісь питання щодо функцій, просто запитайте