Math en JavaScript : arrondir, comparer et tirer au hasard

Math est un objet natif qui regroupe les fonctions mathématiques de JavaScript : arrondis, minimum, maximum, puissances et tirage aléatoire.
3 min de lecture
Believemy logo

Math n'est pas une classe et ne s'instancie pas. C'est une boîte à outils posée à disposition, dont on appelle directement les fonctions. Sur un projet web ordinaire, quatre ou cinq d'entre elles suffisent à couvrir tous les besoins.

Le reste vaut surtout d'être connu de nom : logarithmes, trigonométrie, racines. On les cherche le jour où l'on en a besoin, on ne les apprend pas par cœur.


Définition

Math est un objet natif qui expose des constantes et des fonctions mathématiques. Toutes ses propriétés sont statiques : on écrit Math.round(x), jamais new Math(), et l'opérateur new produit d'ailleurs une erreur sur lui.

JAVASCRIPT
console.log(Math.round(2.5));    // 3
console.log(Math.floor(2.9));    // 2, vers le bas
console.log(Math.ceil(2.1));     // 3, vers le haut
console.log(Math.trunc(-2.7));   // -2, coupe la partie décimale

console.log(Math.max(3, 9, 1));  // 9
console.log(Math.abs(-4));       // 4


Les quatre façons d'arrondir

Elles se ressemblent et ne donnent pas le même résultat sur les négatifs, ce qui est la source d'erreurs la plus fréquente.

FonctionSur 2.5Sur -1.5Comportement
Math.round3-1Au plus proche, les demis vers le haut
Math.floor2-2Toujours vers le bas
Math.ceil3-1Toujours vers le haut
Math.trunc2-1Retire la partie décimale

Math.round(-1.5) vaut -1 et non -2, parce que la règle est « vers le haut » et non « vers la valeur la plus grande en valeur absolue ». Sur des durées ou des soldes négatifs, c'est exactement le genre de détail qui décale un total.

Bon à savoir

Ces fonctions renvoient un nombre, contrairement à toFixed qui renvoie une chaîne. Pour arrondir à deux décimales en restant numérique : Math.round(x * 100) / 100.


Le tirage aléatoire

Math.random() renvoie un décimal entre 0 inclus et 1 exclu. Tout tirage se construit à partir de là.

JAVASCRIPT
// Un entier entre 1 et 6
const de = Math.floor(Math.random() * 6) + 1;

// Un élément au hasard dans un tableau
const options = ["a", "b", "c"];
const choix = options[Math.floor(Math.random() * options.length)];

console.log(de, choix);

Le Math.floor est indispensable : sans lui, l'index serait décimal et le tableau renverrait undefined. Notez aussi que ce tirage n'est pas cryptographique. Pour un jeton de sécurité, il faut crypto.randomUUID() ou crypto.getRandomValues().


Questions fréquentes

Question

Comment trouver le maximum d'un tableau ?

Math.max attend des arguments séparés, pas une liste. Il faut donc l'étaler avec Spread (...) : Math.max(...valeurs). Attention sur un tableau vide, où l'appel renvoie -Infinity, ce qui passe inaperçu jusqu'à ce qu'un affichage devienne incohérent.


Question

Pourquoi mon arrondi à deux décimales est-il parfois faux ?

Parce que le nombre de départ n'est déjà pas exact. Math.round(1.005 * 100) / 100 donne 1 et non 1.01, car 1.005 * 100 vaut en réalité un peu moins de 100,5. Le terme Number (nombre) explique cette limite des flottants et la parade, qui consiste à travailler en entiers.


Question

Y a-t-il un opérateur pour les puissances ?

Oui, ** est arrivé en 2016 et fait la même chose que Math.pow : 2 ** 10 et Math.pow(2, 10) valent tous deux 1024. L'opérateur est plus lisible dans une formule, la fonction reste utile quand la puissance est passée en argument à une autre fonction.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.