A voir également:
- Petit coup de main en javascript
- Bagage à main - Guide
- Telecharger javascript - Télécharger - Langages
- Javascript round ✓ - Forum Javascript
- Delai paiement le bon coin remise en main propre - Forum Vos droits sur internet
- Scan ligne de la main gratuit - Télécharger - Photo & Graphisme
2 réponses
essaye d'utiliser les points au lieu de la virgule :)
29.95 + 59.95 au lieu de 29,95 + 59,95
bonne chance
29.95 + 59.95 au lieu de 29,95 + 59,95
bonne chance
Avec les valeurs d'opérandes indiquées, le résultat n'est pas, avec JS/IE, celui qui est annoncé ! Mais effectivement, pour certaines valeurs, l'effet constaté est réel. Ceci est dû au codage en binaire des nombres fractionnaires (voir discussion récente sur le sujet) : rechercher 0.5, 0.25, 0.125, ... dans un nombre, par soustarctions successives, ne donne pas forcément un résultat exact, pour un nombre fini de bits.
Il semble que JS fonctionne avec des réels en double précision (64 bits ?) correspondant à 16 chiffres significatifs (en décimal). Il m'est arrivé de rencontrer des erreurs de conversion implicite entier/réel de variable contenant 0. Avec la séquence : i=0 ; x=i ; if ( x .eq. 0.) ..., j'ai dû ajouter : if ( i .eq. 0 ) x = 0. parce que x valait 0.000...0001 !
Solution ?
Effectuer les additions en virgule fixes, c'est-à-dire sur des entiers, en alignant les 2 nombres sur la virgule (ou point décimal) avec ajout de "0" à droite pour celui dont le nombre de décimal est le plus court, en multipliant les valeurs par la puissance de 10 ad'hoc. Le résultat exact a le même nombre de décimales que l'opérande qui en a le plus. On doit ensuite diviser le résultat par le même multiplicateur, et supprimer les "0" à droite. Il peut y avoir dépassement de capacité, auquel cas la méthode n'est pas applicable. Il faut alors travailler en décimal (comme en Cobol, ou à la main) en écrivant ses propres fonctions, avec arrondi et troncature, sur des "chaînes". On peut aussi travailler avec un format intermédaire du genre (nnn nnn nnn . nnn nnn nnn), ce qui peut aider pour aligner les résultats de calculs à éditer sur une même colonne.
Pour les multiplications, le nombre de décimales du résultat est la somme des nombres de décimales des opérandes.
Certains langages (rexx, par exemple) utilisent une primitive de formatage, précisant le nombre de décimales à afficher (6 par défaut). Quand cette fonction n'existe pas, il faut se la programmmer. Il est parfois utile, en calcul scientifique, d'inclure le traitement du facteur 1000 (pour kilo, mega, giga, ... ou milli, micro, nano, pico, ...).
Bon courage !!!
Il semble que JS fonctionne avec des réels en double précision (64 bits ?) correspondant à 16 chiffres significatifs (en décimal). Il m'est arrivé de rencontrer des erreurs de conversion implicite entier/réel de variable contenant 0. Avec la séquence : i=0 ; x=i ; if ( x .eq. 0.) ..., j'ai dû ajouter : if ( i .eq. 0 ) x = 0. parce que x valait 0.000...0001 !
Solution ?
Effectuer les additions en virgule fixes, c'est-à-dire sur des entiers, en alignant les 2 nombres sur la virgule (ou point décimal) avec ajout de "0" à droite pour celui dont le nombre de décimal est le plus court, en multipliant les valeurs par la puissance de 10 ad'hoc. Le résultat exact a le même nombre de décimales que l'opérande qui en a le plus. On doit ensuite diviser le résultat par le même multiplicateur, et supprimer les "0" à droite. Il peut y avoir dépassement de capacité, auquel cas la méthode n'est pas applicable. Il faut alors travailler en décimal (comme en Cobol, ou à la main) en écrivant ses propres fonctions, avec arrondi et troncature, sur des "chaînes". On peut aussi travailler avec un format intermédaire du genre (nnn nnn nnn . nnn nnn nnn), ce qui peut aider pour aligner les résultats de calculs à éditer sur une même colonne.
Pour les multiplications, le nombre de décimales du résultat est la somme des nombres de décimales des opérandes.
Certains langages (rexx, par exemple) utilisent une primitive de formatage, précisant le nombre de décimales à afficher (6 par défaut). Quand cette fonction n'existe pas, il faut se la programmmer. Il est parfois utile, en calcul scientifique, d'inclure le traitement du facteur 1000 (pour kilo, mega, giga, ... ou milli, micro, nano, pico, ...).
Bon courage !!!
9 mai 2002 à 07:18