Calcul de double erroné

Résolu
mdrcedrick Messages postés 54 Date d'inscription dimanche 12 septembre 2004 Statut Membre Dernière intervention 22 novembre 2007 - 2 juil. 2007 à 17:16
mdrcedrick Messages postés 54 Date d'inscription dimanche 12 septembre 2004 Statut Membre Dernière intervention 22 novembre 2007 - 2 juil. 2007 à 17:35
bonjour, voilà j'ai un problème de calcul avec un simple double ...

j'ai dans une colonne de JTable des prix sous cete forme : 8.99 ? ou encore 2928.00 ?

je récupère ces prix, je les transforme afin d'obtenir seulement le
nombre, je transforme en double afin de calculer et je fais le calcul
du total

seulement si j'ai un prix en .99 il ne va pas forcément m'ajouter 0.99 mais des fois 0.98999999 ou 0.999999995

et donc ca me fausse tout et je ne vois pas pourquoi il me sort ca
comme nombre alors que j'affiche bien dans la JTable 7.99 (par exemple)


voici la méthode que je déclence lors du clic sur un bouton

    private void         calculTotalPrix()

    {

        this.totalPrix.setText        ("");

        int    
        i   
        =   
    0;

        boolean   
plein        =   
    false;

        double   
    total       
=        0;

       

        while (plein == false)

        {

            if(this.maTable.getValueAt(i, 3).equals(""))

           
        plein   
    =        true;

            else

            {

           
    String       
    prixString       
    =        (String)
this.maTable.getValueAt(i,3);

           
    int       
        posEspace   
    =       
prixString.indexOf(" ");

           
    double       
    prixDouble       
=       
Double.parseDouble(prixString.substring(0, posEspace));

           
    total       
=        total   
    +        prixDouble;

                i++;

            }

        }


        String   
    monTotal       
    =       
String.valueOf(total);

        int   
        longueur   
        =   
    monTotal.length();

        int   
        posPoint   
        =   
    monTotal.indexOf(".");

       

        if (posPoint == -1)

           
this.totalPrix.setText    (monTotal + ".00 ?"); //pas de
virgule

        if (posPoint == longueur - 2 && longueur >2)

           
this.totalPrix.setText    (monTotal + "0 ?"); //un seul
chiffre apèrs la virgule

        if (posPoint == longueur - 3 && longueur > 2)

           
this.totalPrix.setText    (monTotal + " ?"); //deux
chiffres après la virgule

    }


merci d'avance pour votre aide

don't cross the crocked step

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 juil. 2007 à 17:21
Ceci est problème bien connu en informatique : Vu que tu représente les nombres en binaire, tu ne peux pas coder tout les nombres réels sur 32 ou 64 bits ! Donc l'ordinateur est obligé de faire des approximations.

Il te faut donc limiter le nombre de décimales à ton nombre avec un NumberFormat par exemple.
3
mdrcedrick Messages postés 54 Date d'inscription dimanche 12 septembre 2004 Statut Membre Dernière intervention 22 novembre 2007
2 juil. 2007 à 17:35
merci de ton aide
0
Rejoignez-nous