28 votes

Pourquoi 0,06 + 0,01 = 0,07 dans ColdFusion?

Pourquoi ne pas les opérations mathématiques dans ColdFusion semblent être affectés par calcul en virgule flottante questions? Prenez le code:

result = 0.06 + 0.01;

writedump(result);
writedump(result.getClass().getName());

Les sorties qui

0.07

java.lang.Double

Cependant, le equivlant code Java produit ce que je"d attendre lors de l'ajout de deux lits doubles:

public static void main(String[] args) {
    double a = 0.01d;
    double b = 0.06d;

    System.out.println(a + b); //0.06999999999999999
}

C'est ce que je m'attends à le voir à partir de ColdFusion en raison de la réalité de flotter mathématiques (http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).

Ne ColdFusion faire un peu de "magie" derrière les scènes ou je suis à la recherche à une anomalie isolée ici?

37voto

Jon Skeet Points 692016

Je soupçonne fortement qu'il arrondit simplement différemment en sortie . En d'autres termes, le problème est toujours là - il se trouve que cela ne se produit pas lorsque cette valeur particulière est imprimée avec writedump .

Que se passe-t-il si vous utilisez:

 writedump(String.valueOf(result));
 

?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X