Voici un prototype permettant de convertir un nombre en une chaîne lisible respectant les nouvelles normes internationales.
Il y a deux façons de représenter les grands nombres : Vous pouvez soit les afficher en multiples de 1000 = 10 3 (base 10) ou 1024 = 2 10 (base 2). Si Si vous divisez par 1000, vous utilisez probablement les noms préfixes SI, si vous si vous divisez par 1024, vous utilisez probablement les préfixes CEI. Le problème commence avec la division par 1024. De nombreuses applications utilisent le préfixe SI et d'autres utilisent les noms de préfixe CEI. La situation actuelle est un désordre. Si vous voyez des noms de préfixe SI, vous ne savez pas si le nombre est divisé par 1000 ou 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});
Cette fonction ne contient pas de loop
et elle est donc probablement plus rapide que d'autres fonctions.
Utilisation :
Préfixe CEI
console.log((186457865).fileSize()); // default IEC (power 1024)
//177.82 MiB
//KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB
Préfixe SI
console.log((186457865).fileSize(1)); //1,true for SI (power 1000)
//186.46 MB
//kB,MB,GB,TB,PB,EB,ZB,YB
J'ai mis l'IEC par défaut car j'ai toujours utilisé le mode binaire pour calculer la taille d'un fichier... en utilisant la puissance de 1024.
Si vous voulez juste l'un d'entre eux dans une fonction oneliner courte :
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
Utilisation :
console.log(fileSizeIEC(7412834521));
Si vous avez des questions sur les fonctions, n'hésitez pas à les poser.
0 votes
@Brendan... merci ! J'apprécie :) Je vais être honnête cependant... Je n'ai pas trouvé ça tout seul. Je suis presque sûr d'avoir vu quelque chose de similaire quelque part à un moment donné.
0 votes
Votre fonction échouera sur tout ce qui est plus grand qu'environ 2^90.
0 votes
@JanusTroelsen... pourquoi cela ? donnez-moi plus de détails s'il vous plaît !
3 votes
GetReadableFileSizeString(0) ; renvoie 0.1kb ;p
2 votes
Pourquoi ce serait 1,5 ? C'est
1.445281982421875
qui s'arrondit correctement à 1,4.1 votes
1551859712/(1024^3)=1.445281982421875 ce qui est correct !
4 votes
J'aime que tu aies ajouté
YB
. Il est peu probable que quelqu'un obtienne ne serait-ce qu'un YB pour son DB. Cela coûtera 100 trillions de dollars !7 votes
@guyarad - il existe une photo célèbre d'un disque dur de 5 Mo datant d'il y a 50 ans (il avait la taille d'une pièce et pesait environ une tonne). je suis sûr qu'à l'époque, on ne rêvait même pas de Go et de To, et regardez où nous en sommes aujourd'hui... il ne faut jamais dire jamais ;-)