IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Bug dans une addition


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut Bug dans une addition
    j'ai un problème assez simple face auquel je me sens légèrement démuni...

    Voici le code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    System.out.println(chiffre1);
    System.out.println(Double.parseDouble(ecran.getText()));
    chiffre1 = chiffre1 + Double.parseDouble(ecran.getText());
    System.out.println(chiffre1);
    Voici les retours du programme :
    141.9
    42.2
    184.10000000000002

    D'où ça vient, et comment l'éviter?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    C'est un problème de représentation des double...

    Je trouve plus de lien qui explique le problème ...
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    Il faut arrondir les résultats car tu auras toujours ce genre d'erreur avec des float ou double. (3.03f - 0.3f ne donne pas 3.0f par exemple).

    Ou alors essayer d'utiliser BigDecimal si tu n'as pas envie d'arrondir car il gèrerait ce problème.

    (un lien par exemple : http://www.developpez.net/forums/d10...rondi-valeurs/)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Merci pour les infos

    Pour ceux que ça intéresse, j'ai utilisé cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public double approxime(double d) {
                return Math.round(d * Math.pow(10,PRECISION)) /
                                     Math.pow(10,PRECISION);
    }
    PRECISION étant un attribut exprimant la précision en nombre de décimales

    Merci d'avoir pris le temps de m'éclairer

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Normalement c'est à l'affichage, qu'il faut arrondir.

    Les float et les double sont incapables de représenter certaines valeurs. Par conséquent, c'est lorsque qu'on passe du float ou double à "autre chose" comme une String par exemple, qu'il faut réaliser l'arrondi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //
    System.out.format("%#.1f", number);
    - format() : méthode simple pour afficher du texte formatté.
    - %#.1f : demande de formattage d'un nombre à virgule. Affichage naturel avant la virgule, affichage d'un seul chiffre après la virgule (avec arrondi.)

    (Du moins en principe. Après, il y a des applications pratiques à tout.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Ok, merci. Je vais essayer ça aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] bug dans une addition vba
    Par falcon dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/03/2010, 08h54
  2. bug dans une galerie
    Par 3devo dans le forum Flash
    Réponses: 6
    Dernier message: 24/01/2007, 12h05
  3. BUG dans une source
    Par Bily.sdi dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/07/2006, 17h11
  4. Condition dans une addition (SUM)
    Par bianconeri dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/03/2006, 23h03
  5. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo