Passer au contenu principal
eLearner.app
Module 2 · Leçon 3 sur 47/32 dans le cours~10 min
Leçons du module (3/4)

Nombres et Math

En JavaScript, il n'existe qu'un seul type numérique : number. Les entiers comme les décimaux (appelés en anglais floating point) y coexistent. Pas de types int / float séparés comme dans d'autres langages.

JS
typeof 42; // 'number'
typeof 3.14; // 'number'
typeof -0.001; // 'number'
typeof Infinity; // 'number'   ← Infinity è un number speciale
typeof NaN; // 'number'   ← anche "Not a Number" è un number (!)

L'objet global Math

Math n'est pas une fonction : c'est un objet contenant des méthodes et des constantes utiles. On ne l'instancie pas, on l'utilise directement :

JS
Math.min(3, 1, 7); // 1
Math.max(3, 1, 7); // 7
Math.abs(-5); // 5
Math.round(4.5); // 5
Math.floor(4.9); // 4   (arrotonda sempre per difetto)
Math.ceil(4.1); // 5   (arrotonda sempre per eccesso)
Math.sqrt(16); // 4
Math.pow(2, 10); // 1024   (equivalente a 2 ** 10)
Math.PI; // 3.141592653589793

Nombres aléatoires

Math.random() renvoie un décimal entre 0 (inclus) et 1 (exclus). Pour obtenir un entier dans une plage donnée, on utilise une formule simple :

JS
// Intero casuale fra 0 e 9
Math.floor(Math.random() * 10);

// Intero casuale fra 1 e 6 (un dado a sei facce)
Math.floor(Math.random() * 6) + 1;

Les pièges des nombres décimaux (floating point)

JS utilise la représentation IEEE-754 sur 64 bits, partagée par presque tous les langages. C'est une représentation binaire, ce qui signifie que certains nombres décimaux ne peuvent pas être représentés exactement :

JS
0.1 + 0.2; // 0.30000000000000004 (!)
0.1 + 0.2 === 0.3; // false

La solution standard consiste à arrondir avec toFixed(n) (qui renvoie une chaîne) ou à utiliser des entiers en centimes/millièmes lorsqu'on travaille avec de l'argent :

JS
(0.1 + 0.2).toFixed(2); // '0.30' (stringa)
Number((0.1 + 0.2).toFixed(2)); // 0.3 (number)

À toi de jouer

Exercice#js.m2.l3.e1
Tentatives : 0Chargement…

Calcule l'aire d'un cercle de rayon `r = 5` arrondie à la deuxième décimale, sous forme de `number`. Pour `r=5`, le résultat attendu est 78.54.

Chargement de l'éditeur…
Afficher l'indice

Math.PI pour pi, ** pour l'exposant ; .toFixed(2) pour arrondir, Number(...) pour reconvertir en number.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#js.m2.l3.e2
Tentatives : 0Chargement…

Étant donné trois nombres 12, 7, 23, renvoie comme dernière expression la différence entre le maximum et le minimum (c'est-à-dire 16).

Chargement de l'éditeur…
Afficher l'indice

Math.max et Math.min acceptent plusieurs arguments séparés par des virgules.

Solution disponible après 3 tentatives