Comment formater les nombres en notation scientifique ?

Apprenez à afficher des nombres très grands et très petits en JavaScript

Introduction

La notation scientifique exprime les nombres sous forme d'un coefficient multiplié par une puissance de 10. Par exemple, 123 000 000 devient 1,23 × 10^8, et 0,000000456 devient 4,56 × 10^-7. Ce format facilite la lecture et la comparaison de nombres extrêmement grands et extrêmement petits.

Les applications web qui affichent des données scientifiques, des informations financières ou des mesures techniques doivent souvent formater les nombres de cette manière. JavaScript fournit une prise en charge native de la notation scientifique via l'API Intl.NumberFormat, qui gère à la fois le formatage et la localisation.

Cet article vous montre comment formater les nombres en notation scientifique, contrôler la précision, comprendre les différences spécifiques aux paramètres régionaux et choisir entre la notation scientifique et la notation d'ingénierie.

Formater les nombres en notation scientifique

Le constructeur Intl.NumberFormat accepte une option notation qui contrôle la façon dont les nombres sont affichés. Définir notation sur "scientific" formate les nombres en notation scientifique.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(987654321));
// Output: 9.877E8

Le résultat 9.877E8 représente 9,877 × 10^8. Le E sépare le coefficient de l'exposant.

Formater les très grands nombres

La notation scientifique simplifie l'affichage des très grands nombres en les exprimant sous forme de coefficient et d'exposant.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(6.02214076e23));
// Output: 6.022E23

console.log(formatter.format(299792458));
// Output: 2.998E8

console.log(formatter.format(7800000000));
// Output: 7.8E9

Le nombre 6,02214076e23 (constante d'Avogadro) se formate en 6.022E23, ce qui le rend plus facile à lire que 602 214 076 000 000 000 000 000.

Formater les très petits nombres

La notation scientifique fonctionne également pour les très petits nombres, en utilisant des exposants négatifs pour représenter des valeurs inférieures à 1.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(0.000000001));
// Output: 1E-9

console.log(formatter.format(0.00000000000000000016));
// Output: 1.6E-19

console.log(formatter.format(0.0000000456));
// Output: 4.56E-8

Le nombre 0,00000000000000000016 (charge approximative d'un électron en coulombs) se formate en 1.6E-19, évitant ainsi de devoir compter les zéros.

Le formatage de la notation scientifique varie selon les paramètres régionaux

Différents paramètres régionaux utilisent différents séparateurs décimaux dans la notation scientifique. Bien que le séparateur d'exposant reste E dans la plupart des paramètres régionaux à base latine, le séparateur décimal dans le coefficient suit les conventions locales.

const numberToFormat = 987654321;

// US English uses a period as the decimal separator
const usFormatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});
console.log(usFormatter.format(numberToFormat));
// Output: 9.877E8

// Portuguese uses a comma as the decimal separator
const ptFormatter = new Intl.NumberFormat('pt-PT', {
  notation: 'scientific'
});
console.log(ptFormatter.format(numberToFormat));
// Output: 9,877E8

// German also uses a comma as the decimal separator
const deFormatter = new Intl.NumberFormat('de-DE', {
  notation: 'scientific'
});
console.log(deFormatter.format(numberToFormat));
// Output: 9,877E8

Les paramètres régionaux anglais américains produisent 9.877E8 avec un point, tandis que les paramètres régionaux portugais et allemands produisent 9,877E8 avec une virgule.

Contrôler la précision dans la notation scientifique

Les options minimumSignificantDigits et maximumSignificantDigits contrôlent le nombre de chiffres qui apparaissent dans la sortie formatée. Les chiffres significatifs incluent tous les chiffres du coefficient, du premier chiffre non nul au dernier chiffre.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific',
  minimumSignificantDigits: 3,
  maximumSignificantDigits: 3
});

console.log(formatter.format(123456789));
// Output: 1.23E8

console.log(formatter.format(0.00045678));
// Output: 4.57E-4

Définir les deux options à 3 limite la sortie à exactement trois chiffres significatifs. Sans ces options, le formateur inclut plus de chiffres du nombre original.

Vous pouvez également définir des valeurs minimales et maximales différentes pour permettre une précision variable.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific',
  minimumSignificantDigits: 2,
  maximumSignificantDigits: 5
});

console.log(formatter.format(123456789));
// Output: 1.2346E8

console.log(formatter.format(100000000));
// Output: 1.0E8

Cette configuration permet entre 2 et 5 chiffres significatifs, selon le nombre d'entrée.

Formater les nombres en notation d'ingénierie

La notation d'ingénierie est une variante de la notation scientifique où l'exposant est toujours un multiple de 3. Cela s'aligne avec les préfixes métriques SI comme kilo (10^3), méga (10^6) et giga (10^9).

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'engineering'
});

console.log(formatter.format(987654321));
// Output: 987.654E6

console.log(formatter.format(0.000000456));
// Output: 456E-9

Le nombre 987 654 321 se formate comme 987.654E6 en notation d'ingénierie, comparé à 9.877E8 en notation scientifique. L'exposant 6 est un multiple de 3.

Différences entre la notation scientifique et la notation d'ingénierie

La principale différence entre la notation scientifique et la notation d'ingénierie est la façon dont elles choisissent l'exposant. La notation scientifique utilise n'importe quel exposant entier, tandis que la notation d'ingénierie restreint les exposants aux multiples de 3.

const scientificFormatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

const engineeringFormatter = new Intl.NumberFormat('en-US', {
  notation: 'engineering'
});

const testNumbers = [105900, 1234567, 0.00045];

testNumbers.forEach(num => {
  console.log(`Number: ${num}`);
  console.log(`Scientific: ${scientificFormatter.format(num)}`);
  console.log(`Engineering: ${engineeringFormatter.format(num)}`);
  console.log('---');
});

// Output:
// Number: 105900
// Scientific: 1.059E5
// Engineering: 105.9E3
// ---
// Number: 1234567
// Scientific: 1.235E6
// Engineering: 1.235E6
// ---
// Number: 0.00045
// Scientific: 4.5E-4
// Engineering: 450E-6
// ---

Pour 105 900, la notation scientifique produit 1.059E5 tandis que la notation ingénieur produit 105.9E3. Lorsque la notation scientifique utilise déjà un multiple de 3 (comme avec 1 234 567 produisant 1.235E6), les deux notations produisent le même résultat.

Cas d'usage pour les notations scientifique et ingénieur

La notation scientifique fonctionne bien pour les applications qui affichent des données où la lisibilité et la cohérence importent plus que l'alignement avec les préfixes métriques.

Utilisez la notation scientifique pour :

  • Les calculatrices scientifiques et outils de calcul
  • Les applications d'astronomie (distances, masses, luminosités)
  • Les applications de chimie (masses moléculaires, concentrations)
  • Les simulations de physique (masses de particules, valeurs électromagnétiques)

La notation ingénieur fonctionne bien pour les applications où les utilisateurs pensent en termes de préfixes métriques ou doivent communiquer des valeurs verbalement.

Utilisez la notation ingénieur pour :

  • Les applications d'électronique (résistances en kilohms, capacités en picofarads)
  • Les outils de génie électrique (tensions, courants, puissances)
  • Les systèmes de télécommunications (fréquences en mégahertz, débits de données en gigabits)
  • Le génie mécanique (forces en kilonewtons, couples en newton-mètres)

Le choix dépend de vos utilisateurs et de votre domaine. La notation scientifique fournit un formatage cohérent pour tous les nombres, tandis que la notation ingénieur s'aligne sur la façon dont les ingénieurs communiquent les mesures.