You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/05-data-types/02-number/article.md
+26-79Lines changed: 26 additions & 79 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,9 @@
2
2
3
3
En JavaScript moderne, il existe deux types de nombres :
4
4
5
-
<<<<<<< HEAD
6
-
1. Les nombres normaux en JavaScript sont stockés au format 64 bits [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754-2008_revision), également connu sous le nom de "nombres à virgule flottante double précision". Ce sont des chiffres que nous utilisons le plus souvent, et nous en parlerons dans ce chapitre.
5
+
1. Les nombres normaux en JavaScript sont stockés au format 64 bits [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), également connu sous le nom de "nombres à virgule flottante double précision". Ce sont des chiffres que nous utilisons le plus souvent, et nous en parlerons dans ce chapitre.
7
6
8
7
2. Les nombres BigInt pour représenter des entiers de longueur arbitraire. Ils sont parfois nécessaires, car un nombre régulier ne peut pas dépasser de manière précise <code>2<sup>53</sup></code> ou être inférieur à <code>-2<sup>53</sup></code>. Comme les bigints sont utilisés dans quelques zones spéciales, nous leur consacrons un chapitre spécial <info:bigint>.
9
-
=======
10
-
1. Regular numbers in JavaScript are stored in 64-bit format [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), also known as "double precision floating point numbers". These are numbers that we're using most of the time, and we'll talk about them in this chapter.
11
-
12
-
2. BigInt numbers represent integers of arbitrary length. They are sometimes needed because a regular integer number can't safely exceed <code>(2<sup>53</sup>-1)</code> or be less than <code>-(2<sup>53</sup>-1)</code>, as we mentioned earlier in the chapter <info:types>. As bigints are used in few special areas, we devote them a special chapter <info:bigint>.
13
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
14
8
15
9
Donc, ici, nous allons parler de chiffres réguliers. Augmentons nos connaissances à leur sujet.
16
10
@@ -28,11 +22,7 @@ Nous pouvons également utiliser l’underscore `_` comme séparateur :
28
22
let billion =1_000_000_000;
29
23
```
30
24
31
-
<<<<<<< HEAD
32
-
Ici l’underscore `_` joue le rôle de "sucre syntaxique", il rend le nombre plus lisible. Le moteur JavaScript ignore simplement `_` entre les chiffres, donc c'est exactement le même milliard que ci-dessus.
33
-
=======
34
-
Here the underscore `_` plays the role of the "[syntactic sugar](https://en.wikipedia.org/wiki/Syntactic_sugar)", it makes the number more readable. The JavaScript engine simply ignores `_` between digits, so it's exactly the same one billion as above.
35
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
25
+
Ici, l'underscore `_` joue le rôle de "[sucre syntaxique](https://en.wikipedia.org/wiki/Syntactic_sugar)", il rend le nombre plus lisible. Le moteur JavaScript ignore simplement `_` entre les chiffres, donc c'est exactement le même milliard que ci-dessus.
36
26
37
27
Dans la vraie vie cependant, nous essayons d'éviter d'écrire de longues séquences de zéros. Nous sommes trop paresseux pour ça. Nous essaierons d'écrire quelque chose comme "1 milliard" pour un milliard ou "7,3 milliards" pour 7 milliards 300 millions. La même chose est vraie pour la plupart des grands nombres.
38
28
@@ -61,11 +51,7 @@ let mсs = 0.000001;
61
51
Comme avant, l'utilisation de `"e"` peut nous aider. Si nous voulons éviter d'écrire les zéros explicitement, nous pourrions dire la même chose comme :
62
52
63
53
```js
64
-
<<<<<<<HEAD
65
-
let mcs =1e-6; // six zéros à gauche de 1
66
-
=======
67
-
let mcs =1e-6; // five zeroes to the left from 1
68
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
54
+
let mcs =1e-6; // cinq zéros à gauche de 1
69
55
```
70
56
71
57
Si nous comptons les zéros dans `0.000001`, il y en a 6. Donc logiquement, c'est `1e-6`.
@@ -195,11 +181,7 @@ Il y a deux façons de le faire:
195
181
alert( num.toFixed(1) ); // "12.4"
196
182
```
197
183
198
-
<<<<<<< HEAD
199
184
Veuillez noter que le résultat de `toFixed` est une chaîne de caractères. Si la partie décimale est plus courte qu'indiquée, des zéros sont ajoutés à la fin :
200
-
=======
201
-
Please note that the result of`toFixed` is a string. If the decimal part is shorter than required, zeroes are appended to the end:
202
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
203
185
204
186
```js run
205
187
let num = 12.34;
@@ -210,11 +192,7 @@ Il y a deux façons de le faire:
210
192
211
193
## Calculs imprécis
212
194
213
-
<<<<<<<HEAD
214
-
En interne, un nombre est représenté au format 64 bits [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754-2008_revision), il y a donc exactement 64 bits pour stocker un nombre : 52 d'entre eux sont utilisés pour stocker les chiffres, 11 d'entre eux stockent la position du point décimal(ils sont zéro pour les nombres entiers), et 1 bit est pour le signe.
215
-
=======
216
-
Internally, a number is represented in64-bit format [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), so there are exactly 64 bits to store a number: 52 of them are used to store the digits, 11 of them store the position of the decimal point, and 1 bit is for the sign.
217
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
195
+
En interne, un nombre est représenté au format 64 bits [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754), il y a donc exactement 64 bits pour stocker un nombre : 52 d'entre eux sont utilisés pour stocker les chiffres, 11 d'entre eux stockent la position du point décimal(ils sont zéro pour les nombres entiers), et 1 bit est pour le signe.
218
196
219
197
Si un nombre est vraiment énorme, il peut déborder du stockage 64 bits et devenir une valeur numérique spéciale `Infinity`:
220
198
@@ -267,20 +245,11 @@ Le même problème existe dans de nombreux autres langages de programmation.
267
245
PHP, Java, C, Perl, Ruby donnent exactement le même résultat, car ils sont basés sur le même format numérique.
268
246
```
269
247
270
-
Pouvons-nous contourner le problème? Bien sûr, il y a plusieurs façons:
271
-
272
-
<<<<<<< HEAD
273
-
1. Nous pouvons arrondir le résultat à l'aide d'une méthode [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed):
274
-
=======
275
-
```js run
276
-
let sum = 0.1 + 0.2;
277
-
alert( sum.toFixed(2) ); // "0.30"
278
-
```
279
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
248
+
Pouvons-nous contourner le problème? Bien sûr, la méthode la plus fiable est d'arrondir le résultat à l'aide d'une méthode [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed):
280
249
281
250
```js run
282
251
let sum = 0.1 + 0.2;
283
-
alert( sum.toFixed(2) ); // 0.30
252
+
alert( sum.toFixed(2) ); // "0.30"
284
253
```
285
254
286
255
Veuillez noter que `toFixed` renvoie toujours une chaîne de caractères. Il s'assure qu'il a 2 chiffres après le point décimal. C'est pratique si nous avons un magasin en ligne et devons montrer `0.30$`. Pour les autres cas, nous pouvons utiliser le plus unaire `+` pour le contraindre en un nombre:
2.Nous pouvons temporairement transformer des nombres en nombres entiers en les multipliant pour effectuer des calculs, puis les diviser pour avoir les valeurs voulues. Cela fonctionne comme ceci:
262
+
Nous pouvons également multiplier temporairement les nombres par 100 (ou un nombre plus grand) pour les transformer en nombres entiers, faire le calcul, puis rediviser. Ensuite, comme nous faisons des calculs avec des nombres entiers, l'erreur diminue quelque peu, mais nous l'obtenons toujours sur la division :
Cela fonctionne parce que lorsque nous faisons `0.1 * 10 = 1` et `0.2 * 10 = 2`, les deux nombres deviennent des nombres entiers et il n'y a pas de perte de précision.
269
+
Ainsi, l'approche multiplier/diviser réduit l'erreur, mais ne la supprime pas totalement.
300
270
301
-
3. Si nous avions affaire à un magasin, la solution la plus radicale consisterait à stocker tous les prix en centimes et à ne pas utiliser de fractions du tout. Mais que se passe-t-il si nous appliquons une réduction de 30%? En pratique, il est rarement réalisable d'éviter totalement les fractions. Les solutions ci-dessous permettent d'éviter ce piège.
271
+
Parfois, nous pourrions essayer d'éviter les fractions complètement. Par exemple, si nous traitons avec un magasin, nous pouvons stocker les prix en cents au lieu de dollars. Mais que se passe-t-il si nous appliquons une réduction de 30%? En pratique, il est rarement possible d'éviter totalement les fractions. Il suffit de les arrondir pour couper les "queues" si nécessaire.
302
272
303
273
````smart header="La chose amusante"
304
274
Essayez de lancer ceci:
@@ -339,11 +309,7 @@ Ils appartiennent au type `number`, mais ne sont pas des numéros "normaux". Il
339
309
alert( isNaN("str") ); // true
340
310
```
341
311
342
-
<<<<<<< HEAD
343
-
Mais avons-nous besoin de cette fonction? Ne pouvons-nous pas simplement utiliser la comparaison `===NaN`? Désolé, mais la réponse est non. La valeur `NaN` est unique en ce sens qu'elle ne vaut rien, y compris elle-même:
344
-
=======
345
-
But do we need this function? Can't we just use the comparison `===NaN`? Unfortunately not. The value `NaN` is unique in that it does not equal anything, including itself:
346
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
312
+
Mais avons-nous besoin de cette fonction? Ne pouvons-nous pas simplement utiliser la comparaison `===NaN`? Malheureusement non. La valeur `NaN` est unique en ce sens qu'elle ne vaut rien, y compris elle-même :
347
313
348
314
```js run
349
315
alert( NaN===NaN ); // false
@@ -369,14 +335,6 @@ alert( isFinite(num) );
369
335
370
336
Veuillez noter qu'une chaîne de caractères vide ou une chaîne de caractères contenant seulement un espace est traitée comme `0` dans toutes les fonctions numérique, y compris `isFinite`.
371
337
372
-
<<<<<<< HEAD
373
-
```smart header="Comparer avec Object.is"
374
-
375
-
Il existe une méthode intégrée spéciale [Object.is](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/is) qui compare des valeurs telles que `===`, mais qui est plus fiable pour deux cas extrêmes :
376
-
377
-
1. Cela fonctionne avec `Nan`:`Object.is(NaN, NaN) === true`, c'est une bonne chose.
378
-
2. Les valeurs `0` et `-0` sont différentes: `Object.is(0, -0) === false`, techniquement c’est vrai, car le numéro a en interne un bit de signe qui peut être différent même si tous les autres bits sont à zéro.
379
-
=======
380
338
````smart header="`Number.isNaN` and `Number.isFinite`"
381
339
[Number.isNaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) and [Number.isFinite](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite) methods are the more "strict" versions of `isNaN` and `isFinite` functions. They do not autoconvert their argument into a number, but check if it belongs to the `number` type instead.
382
340
@@ -406,20 +364,16 @@ Il existe une méthode intégrée spéciale [Object.is](https://developer.mozill
406
364
In a way, `Number.isNaN` and `Number.isFinite` are simpler and more straightforward than `isNaN` and `isFinite` functions. In practice though, `isNaN` and `isFinite` are mostly used, as they're shorter to write.
407
365
````
408
366
409
-
```smart header="Comparison with `Object.is`"
410
-
There is a special built-in method `Object.is` that compares values like `===`, but is more reliable for two edge cases:
367
+
```smart header="Comparer avec Object.is"
411
368
412
-
1. It works with `NaN`: `Object.is(NaN, NaN) ===true`, that's a good thing.
413
-
2. Values `0` and `-0` are different: `Object.is(0, -0) ===false`, technically that's correct, because internally the number has a sign bit that may be different even if all other bits are zeroes.
414
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
369
+
Il existe une méthode intégrée spéciale [Object.is](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/is) qui compare des valeurs telles que `===`, mais qui est plus fiable pour deux cas extrêmes :
370
+
371
+
1. Cela fonctionne avec `Nan`:`Object.is(NaN, NaN) === true`, c'est une bonne chose.
372
+
2. Les valeurs `0` et `-0` sont différentes: `Object.is(0, -0) === false`, techniquement c’est vrai, car le numéro a en interne un bit de signe qui peut être différent même si tous les autres bits sont à zéro.
415
373
416
374
Dans tous les autres cas, `Object.is(a, b)` est identique à `a === b`.
417
375
418
-
<<<<<<< HEAD
419
-
Ce mode de comparaison est souvent utilisé dans la spécification JavaScript. Lorsqu'un algorithme interne doit comparer deux valeurs pour être exactement identiques, il utilise `Object.is`(appelé en interne [SameValue](https://tc39.github.io/ecma262/#sec-samevalue)).
420
-
=======
421
-
We mention `Object.is` here, because it's often used in JavaScript specification. When an internal algorithm needs to compare two values for being exactly the same, it uses `Object.is` (internally called [SameValue](https://tc39.github.io/ecma262/#sec-samevalue)).
422
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
376
+
Nous mentionnons `Object.is` ici, car il est souvent utilisé dans les spécifications JavaScript. Lorsqu'un algorithme interne doit comparer deux valeurs pour être exactement identiques, il utilise `Object.is` (appelé en interne [SameValue](https://tc39.github.io/ecma262/#sec-samevalue)).
423
377
```
424
378
425
379
@@ -479,13 +433,8 @@ Quelques exemples:
479
433
alert( Math.random() ); // ... (tout nombre aléatoire)
480
434
```
481
435
482
-
<<<<<<< HEAD
483
-
`Math.max(a, b, c...)` / `Math.min(a, b, c...)`
484
-
: Retourne le plus grand / le plus petit des nombres indiqués en argument.
485
-
=======
486
-
`Math.max(a, b, c...)` and `Math.min(a, b, c...)`
487
-
: Returns the greatest and smallest from the arbitrary number of arguments.
488
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
436
+
`Math.max(a, b, c...)` et `Math.min(a, b, c...)`
437
+
: Renvoie le plus grand et le plus petit d'un nombre arbitraire d'arguments.
489
438
490
439
```js run
491
440
alert( Math.max(3, 5, -10, 0, 1) ); // 5
@@ -516,18 +465,16 @@ Pour différents systèmes de numération :
516
465
517
466
Pour convertir des valeurs telles que `12pt` et `100px` en un nombre :
518
467
519
-
<<<<<<<HEAD
520
-
- Utiliser `parseInt/parseFloat` pour la conversion "soft", qui lit un nombre dans une chaîne de caractères, puis renvoie la valeur qu'ils pouvaient lire avant l'erreur.
521
-
=======
522
-
For regular number tests:
468
+
Pour les tests de nombres réguliers :
523
469
524
-
-`isNaN(value)`converts its argument to a number and then tests it for being`NaN`
525
-
-`Number.isNaN(value)`checks whether its argument belongs to the`number` type, and if so, tests it for being`NaN`
526
-
-`isFinite(value)`converts its argument to a number and then tests it for not being`NaN/Infinity/-Infinity`
527
-
-`Number.isFinite(value)`checks whether its argument belongs to the`number` type, and if so, tests it for not being`NaN/Infinity/-Infinity`
470
+
- `isNaN(value)`convertit son argument en nombre puis le teste pour être`NaN`
471
+
- `Number.isNaN(value)`vérifie si son argument appartient au type`number`, et si c'est le cas, le teste pour être`NaN`
472
+
- `isFinite(value)`convertit son argument en nombre puis le teste pour ne pas être`NaN/Infinity/-Infinity`
473
+
- `Number.isFinite(value)`vérifie si son argument appartient au type`number`, et si oui, le teste pour ne pas être`NaN/Infinity/-Infinity`
528
474
529
475
For converting values like `12pt` and `100px` to a number:
530
-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
476
+
477
+
- Utiliser `parseInt/parseFloat` pour la conversion "soft", qui lit un nombre dans une chaîne de caractères, puis renvoie la valeur qu'ils pouvaient lire avant l'erreur.
0 commit comments