8
votes

- = 0.1 résultat étrange

Dupliqué possible:
est double multiplication brisée dans .NET?

code JavaScript: xxx

http://jsfiddle.net/upue6/4/

Je m'attendais à: xxx

mais obtenu ceci: xxx

pourrait-on expliquer ce qui se passe là-bas?


5 Réponses :


7
votes

Vous voyez un artefact de la façon dont les ordinateurs font des arithmétiques de point flottant. Voir, par exemple, http://fr.wikipedia.org/wiki/floitant_point#machine_precision


0 commentaires

1
votes

Tous les chiffres ne peuvent pas être représentés exactement, même s'ils ont une simple représentation dans la notation décimale. En effet, JavaScript utilise IEEE 754 pour représenter des valeurs de point flottant et utilise ainsi la base 2 au lieu de la base 10. Cela vous conduit à ne pas soustraire 0,1 (même si votre code source le dit), mais une valeur proche de celle-ci.


0 commentaires

3
votes

Vous avez affaire à un numéro de point flottant. Découvrez les méthodes Tofixed et TopRecision.


0 commentaires

6
votes

Cela résoudra votre problème

http://jsfiddle.net/avpnx/ p >

var n = 1;
while ( n > 0 ){
    n -= 0.1;
    result = n.toFixed(1);
    document.body.innerHTML += result + "<br/>";
}


0 commentaires

9
votes

de Le guide de point flottant :

Pourquoi mes numéros ne sont-ils pas 0,1 + 0,2 ajouter à une belle ronde 0,3, et Au lieu de cela, j'ai un résultat étrange comme 0.30000000000000004?

Parce que, en interne, les ordinateurs utilisent un format (point flottant binaire) qui ne peut pas représenter avec précision un nombre comme 0,1, 0,2 ou 0,3 du tout.

lorsque le code est compilé ou interprété, votre "0,1" est déjà arrondi au nombre le plus proche dans ce format, qui donne un petit Erreur d'arrondi même avant la Le calcul arrive.


1 commentaires

+1 Cela aurait dû être la réponse acceptée (ou alternativement la mine).