toFixed(fractionDigits?)
a été expliqué plus ou moins précisément dans d'autres réponses :
- il renvoie une représentation en chaîne du nombre avec
fractionDigits
[montant] chiffres après le point décimal :
Un exemple :
(-3).toFixed(1) // '-3.0'
(-3).toFixed(0) // '-3'
(-3).toFixed() // '-3'
(-0.03).toFixed(1) // '-0.0'
toPrecision(precision?)
n'a pas été décrit correctement dans les réponses précédentes, il faut donc faire attention. J'ajouterais également un avertissement : je n'ai pas été en mesure d'assimiler les spécifications de l'UE. toPrecision
Les points suivants sont donc basés sur une approche d'essai et d'erreur pour tester la mise en œuvre dans Node.js. Et ces étapes ne couvrent pas tous les cas de figure, par exemple si le nombre est NaN, ou si l'argument de précision n'est pas un entier, ou est <1 ou >100, etc. Ceci afin de ne pas rendre l'explication encombrée comme la spécification semble l'être.
* La numérotation des cas est conservée dans la liste, même si les cas peuvent sembler similaires les uns aux autres, ils doivent démontrer un comportement particulier.
-
il représente d'abord le nombre en notation exponentielle avec
precision
étant le nombre de chiffres dans le significand, comme
Cas 1 : 0.000004
→ précision = 3 → 400 * 10^-8
Cas 2 : 0.0000004
→ précision = 3 → 400 * 10^-9
Cas 3 : 123
→ précision = 1 → 1.23 * 10^2
Cas 4 : 153
→ précision = 1 → 1.53 * 10^2
Cas 5 : 1234.56
→ précision = 3 → 123.456 * 10^1
Cas 6 : 1234.56
→ précision = 5 → 12345.6 * 10^-1
- puis il arrondit la partie significative
Cas 1 : 400 * 10^-8
→ 400 * 10^-8
(aucune fraction n'était présente, aucun changement)
Cas 2 : 400 * 10^-9
→ 400 * 10^-9
(même raisonnement que dans le cas 1)
Cas 3 : 1.23 * 10^2
→ 1 * 10^2
( 1.23
a été arrondie à 1
)
Cas 4 : 1.53 * 10^2
→ 2 * 10^2
( 1.53
arrondis à 2
)
Cas 5 : 123.456 * 10^1
→ 123 * 10^1
(arrondis aussi)
Cas 6 : 12345.6 * 10^-1
→ 12346 * 10^-1
(arrondis)
-
puis il produit une représentation sous forme de chaîne du nombre qui suit les règles :
3a) tous les chiffres du significande de l'étape 2 seront préservés
3b) La notation exponentielle est utilisée si precision
< le nombre de chiffres avant le point (en représentation "normale", c'est-à-dire décimale)
Cas 3 : 1 * 10^2
→ '1e+2'
(le numéro est maintenant 100
(3 chiffres, précision 1, exposant utilisé)
Cas 4 : 2 * 10^2
→ '2e+2'
(le numéro est maintenant 200
(3 chiffres, précision 1, exposant utilisé)
Cas 5 : 123 * 10^1
→ '1.23e+3'
(le numéro est maintenant 1230
4 chiffres, la précision est de 3, l'exposant est utilisé ; notez que le significande a conservé tous les chiffres de l'étape 2 : 123
est devenu 1.23
)
3c) La notation exponentielle est utilisée si le nombre a la partie entière 0 et que le nombre de zéros juste après la virgule et avant le premier chiffre significatif (en notation "normale") est >5.
Cas 2 : 400 * 10^-9
→ '4.00e-7'
(le nombre est de 0,0000004, il a la valeur de 0
partie entière et il y a >5 zéros après le point décimal, Notez que les deux zéros de 400 * 10^-9
ont été préservés )
3d) La notation décimale est utilisée, si le nombre a la partie entière 0 et le nombre de zéros juste après le point décimal <= 5 mais les chiffres du significande de l'étape 2 seront préservés.
Cas 1 : 400 * 10^-8
→ '0.00000400'
(les deux zéros de la partie significande ont été préservés)
3e) La notation décimale est utilisée, si precision
>= le nombre de chiffres avant le point en représentation décimale
Cas 6 : 12346 * 10^-1
→ 1234.6
(la forme décimale du nombre de l'étape 2 est 1234.6, la précision est de 5, le nombre de chiffres avant la virgule est de 4, la chaîne utilise la notation décimale, tous les chiffres du significande de l'étape 2 ont été préservés)
console.log((0.000004).toPrecision(3));
console.log((0.0000004).toPrecision(3));
console.log((123).toPrecision(1));
console.log((153).toPrecision(1));
console.log((1234.56).toPrecision(3));
console.log((1234.56).toPrecision(5));