| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
alain974

Inscrit le: 13 Juin 2009 Messages: 144 Localisation: Réunion
|
Posté le: Lun Mar 28, 2011 11:43 am Sujet du message: boucles décimales en binaire |
|
|
Si on veut afficher les réels entre 0 et 1 par pas de 0,1 avec le script suivant:
| Code: |
for(x=0;x<=1;x=x+0.1){
Println(x);
}
|
on a l'affichage suivant:
| Code: |
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
|
Cela est dû à ce que JavaScript calcule en binaire, et que 0,1 n'est pas un nombre aussi simple en binaire qu'en décimal. Le problème existe aussi dans les tableurs et dans d'autres logiciels d'algorithmique que CaRMetal... Mais JavaScript permet d'y remédier, tout simplement en forçant les valeurs de x à rester exactes à une décimale près:
| Code: |
for(x=0;x<=1;x=Math.round(10*(x+0.1))/10){
Println(x);
}
|
donne bien le résultat escompté. Bien entendu on peut faire autre chose que simplement afficher les valeurs de x... |
|
| Revenir en haut de page |
|
 |
alain974

Inscrit le: 13 Juin 2009 Messages: 144 Localisation: Réunion
|
Posté le: Jeu Sep 29, 2011 6:25 am Sujet du message: |
|
|
Version plus simple:
| Code: |
for(x=0;x<=1;x=Number((x+0.1).toFixed(1))){
Println(x);
}
|
(plus simple parce qu'elle évite de passer par la multiplication puis division par 10, mais elle nécessite de reconvertir en nombre ce qui est devenu une chaîne de caractères; on n'a rien sans rien...) |
|
| Revenir en haut de page |
|
 |
|