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 :

Addition avec des variables "double"


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut Addition avec des variables "double"
    Bonjour,

    J'ai fait différentes recherches mais je ne suis pas vraiment parvenu à comprendre les réponses (souvent en relation avec BigDecimal).

    Ci-dessous un petit moteur de calcul pour une calculatrice. Lorsque j'ajoute le "double" 12,22 au "double" 0,22, j'obtiens le résultat 0,44. De même 12,22 + 24,56 me donne 49,12.

    J'ai bien compris que c'était un problème de format de variable mais je ne parviens pas à m'en sortir.

    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
    48
    49
    50
    51
    52
    53
    54
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JOptionPane;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import java.text.NumberFormat;
    import java.text.ParsePosition;
    import java.text.DecimalFormat;
     
     
    public class MoteurTest1 implements ActionListener {
    		Test1 parent;
    		NumberFormat formatNombres = NumberFormat.getInstance();
    		MoteurTest1(Test1 parent){ 
    	this.parent=parent;
    	}
    	/**
             * @param args
             */
    	public void actionPerformed(ActionEvent événement) {
    		// TODO Auto-generated method stub
    		// Retrouve la source de l'action
    		JButton boutonClic = (JButton) événement.getSource();
    		String texteChampAffichage = parent.champAffichage.getText();
     
    		int verifF;
    		double result = 0;
    		DecimalFormat df = new DecimalFormat("0.00");
     
    		result = formatNombres.parse(texteChampAffichage,new ParsePosition(0)).doubleValue();
     
    		Object sourceEvénement = événement.getSource();
     
    		//Pour chaque bouton d'action, mémorise l'action
    		//sélectionnée, +, -, /, ou *, stocke la valeur courante
    		//dans la variable résultatCourant et vide le champ
    		//Affichage avant l'entrée du nombre suivant
    		if (sourceEvénement == parent.boutonPlus){
    			verifF = texteChampAffichage.indexOf(",,");
    				if(verifF<0) {
    					parent.champAffichage.setText("");
    					System.out.println("+ "+result);
    					}
    				else if (verifF>=0){
    				parent.champAffichage.setText("ERREUR - présence de plusieurs virgules");
    		}
    		}
    		else if (sourceEvénement == parent.boutonEgale){
    			result +=  (formatNombres.parse(texteChampAffichage,new ParsePosition(0)).doubleValue());
    			parent.champAffichage.setText(formatNombres.format(result));
    			System.out.println("= "+df.format(result));
    		}
    	}
    }
    Merci de me guider vers la solution.

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    Ben, il y a plusieurs problèmes dans ton code mais principalement la portée de ta variable result.
    Si je reprends les étapes:

    1) Tu saisis 12,22 et tu clique sur le bouton plus ==> result = 12.22
    2) Tu saisis 0.22 et clique sur le bouton égal , lorsque tu passe dans ta méthode actionPerformed, result est redéfini à zéro (ligne 27). A la ligne 30, tu affecte la valeur double issue de ta saisie ==> result = 0.22
    Ensuite, tu arrives à la ligne 49, là encore tu récupères la valeur du champ que tu as déjà récupéré à la ligne 30 (0.22) que tu rajoutes dans la variable result.
    C'est pourquoi tu te te retrouves avec 0.44 (0.22+0.22) et 49,12 (24.56+24.56)

    Bref, il faut que tu sortes la définition de ta variable resut de la méthode actionPerformed, c'est un problème de portée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Bonjour NoClassDefFound,

    Effectivement, j'aurais du être beaucoup plus attentif au code; en relisant j'aurais du me rendre de l'erreur. C'est corrigé et tout fonctionne.

    Je te remercie.

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

Discussions similaires

  1. Script shell : afficher le contenu des variables entre simple quote
    Par mualki dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 23/01/2010, 00h14
  2. Réponses: 14
    Dernier message: 30/11/2007, 11h58

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