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 :

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;
      }
   }
Se qui me donne comme valeur en print :
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
Est-ce que quelqu'un à une solution afin d'éviter ces reliquats de nombre qui polue ces chiffres.

Merci beaucoup.


Carrel :