Bonjour,
J'ai un problème avec les variables de type double ou float, quand je fais des opérations mathématique il me donne des valeurs erronées (problème avec la mémoire ?) comme présenté dans le code :
Se qui me donne comme valeur en print :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 private void calcul() { // double dValeur; // double dArrondi; // double dNombre; dValeur = 1260.05; dArrondi = 0.05; dNombre = 1; iType = 2; if (dNombre == 0) { iValeur = 0; fValeur = 0; dValeur = 0; } else { dValeur = dValeur / dArrondi * dNombre; System.out.println("Valeur avec un problème : " + dValeur); System.out.println("Valeur dValeur = 25200.9999999999996"); System.out.println("au lieu de 25100 = 1260.05 / 0.05 * 1"); if (iType == 0) { // Séparation par le millieu dValeur += 0.49999999; } if (iType == 1) { // Séparation par le suppérieur dValeur += 0.99999999; } if (iType == 2) { // Séparation par l'inférieur dValeur += 0; } iValeur = (int) dValeur; System.out.println("Valeur avec un problème : " + iValeur); System.out.println("iValeur devait me donner 25201"); System.out.println("Mais iValeur me donne 25200, puisque dValeur = 25200.999999"); iValeur = 25201; dValeur = iValeur * dArrondi / dNombre; System.out.println("Valeur avec un problème : " + dValeur); System.out.println("dValeur = 1260.0500000000002 aulieu de 1260.05"); System.out.println("Calcul = 25201 * 0.05 / 1"); iValeur = (int) dValeur; fValeur = (float) dValeur; } }
Est-ce que quelqu'un à une solution afin d'éviter ces reliquats de nombre qui polue ces chiffres.Valeur avec un problème : 25200.999999999996
Valeur dValeur = 25200.9999999999996
au lieu de 25100 = 1260.05 / 0.05 * 1
Valeur avec un problème : 25200
iValeur devait me donner 25201
Mais iValeur me donne 25200, puisque dValeur = 25200.999999
Valeur avec un problème : 1260.0500000000002
dValeur = 1260.0500000000002 aulieu de 1260.05
Calcul = 25201 * 0.05 / 1
Merci beaucoup.
Carrel :
Partager