JAVA ne sait pas faire d'addition

Philou1789 Messages postés 1 Date d'inscription vendredi 4 octobre 2002 Statut Membre Dernière intervention 29 mai 2006 - 29 mai 2006 à 23:27
cs_nimatik Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 5 juin 2006 - 4 juin 2006 à 20:25
Au secours je ne m'en sors pas Java ne sais pas calculer ou quoi !!!

Mon code

double A = 84.4;

double B = 53.2;

double C = A + B;

System.out.println("Tot="+C);

Le resultat:

Tot=137.60000000000002

Et pire encore :
regardez moi ca

double A = 84.4;

double B = 53.2;

double C = A + B;

if (C==137.60000000000002)

System.out.println("Tot 1="+C);

else

System.out.println("Tot 2="+C);


Et voilà la réponse:

Tot 1=137.60000000000002


AU SECOURS

Phil

3 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
30 mai 2006 à 00:57
Salut, ce problème ne vient pas de Java, ce comportement a lieu avec n'importe quel langage, il vient des méthodes de calcul utilisées par les CPU sur les nombres flottants.
Par exemple en C on obtient:
#include <stdio.h>

int main() {
double a,b,c;
a = 53.2;
b = 84.4;
c = a + b;
printf("%.30f", c);
}

A l'exécution le même problème qu'en Java (d'ailleur ce n'est pas un problème)
bouba@debian:~/tmp/test$ ./main2
137.600000000000022737367544323206
bouba@debian:~/tmp/test$

La seule solution que tu as c'est de perdre un peu de précision.
C *= 100000;
C = ((int)C)/1000000.;

Voilà, bonne chance.

Bouba
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
1 juin 2006 à 10:59
La norme utilisé en Java est "IEEE 754-1985" ( standard de réprésentation

des nombres flottants en binaire ).
Il ne faut pas oublier que le CPU travaille en binaire et nous en base 10.

Voici quelques liens pour information :
http://java.sun.com/developer/JDCTechTips/2003/tt0204.html#2
http://docs.sun.com/source/806-3568/ncg_goldberg.html
http://www.javaworld.com/javaworld/jw-06-2001/jw-0601-cents.html
0
cs_nimatik Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 5 juin 2006
4 juin 2006 à 20:25
il suffit de caster le resultat
 double A = 84.4;
 double B = 53.2;
 double C = A + B;
 System.out.println("Tot="+(float)C);
0
Rejoignez-nous