bonsoir tout le monde
quand je fait
====>il me donne comme résultat 1792711.3800000001Code:
1
2
3
4
5
6
7 double x=1705541.59; double y=8716.79; double z =0; z=x+y ;
mais pour quoi 00000001 !!!! merci pour l'aide
Version imprimable
bonsoir tout le monde
quand je fait
====>il me donne comme résultat 1792711.3800000001Code:
1
2
3
4
5
6
7 double x=1705541.59; double y=8716.79; double z =0; z=x+y ;
mais pour quoi 00000001 !!!! merci pour l'aide
C'est dût aux arrondis effectués lors du calcul avec des doubles, c'est un problème que l'on rencontre tous un jour, et on peut rien y faire ..
Utilises les BigDecimal
FAQ
finalement j'ai opté pour cet solution
Code:
1
2
3
4
5
6
7 double x=1705541.59; double y=8716.79; double z =0; z=((x+y),2) ;
et le résulta 1792711.38Code:
1
2
3
4 public static double floor(double a, int n) { double p = Math.pow(10.0, n); return Math.floor((a*p)+0.5) / p;
J'éviterais cette solution si j'étais vous. Elle est complexe et n'aboutis pas à un meilleur résultat dans la plupart des cas (en fait ca risque meme de diminue la précision de vos calculs).
Soit vous utiliser des BigDecimal si vous avez absolument besoin de nombres exactes, soit vous utiliser des nombre flottant en tenant compte de la marge d'erreur. Pour ce qui est de l'affichage du résultat, il suffit d'arrondir à ce moment là:
Code:
1
2
3
4
5
6 double x=1705541.59; double y=8716.79; double z =0; z=x+y; System.out.println("résultat= %.4f\n",(Double)z);