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

Collection et Stream Java Discussion :

faire pourcentage avec deux int


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut faire pourcentage avec deux int
    Bonjour,

    Je désespère de faire un simple pourcentage formaté Decimal(3,2)+' %' (séparateur de décimal[,]).

    Ma méthode est le suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String pourcentage(int a,int b){
            BigDecimal value = ((new BigDecimal(getNombreCommandes())).divide(new BigDecimal(getNombreCommandesPreparees()))).multiply(new BigDecimal(100));
            DecimalFormat df = new DecimalFormat("###.##");
            return df.format(value.doubleValue()) + " %";
     
    }
    im me répond au divide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    An exception occurred: java.lang.ArithmeticException
    Merci pour votre aide...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Ne rencontrerais tu pas l'exception donnée ici par hasard ?

  3. #3
    Membre chevronné Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Par défaut
    Je pense à la même chose que George7.
    Tu as dû faire une division du style 1/3 = 0.33333333333333333......

    et la méthode avec la méthode divide :
    If the quotient has a nonterminating decimal expansion and the operation is specified to return an exact result, an ArithmeticException is thrown.
    En gros tu n'as pas un résultat exact d'où l'exception.

    Mais peut-être qu'il y a plus simple pour faire ce que tu veux faire ?

    Code découpé pour suivre les différentes étapes (fait en java 1.5):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        private static String pourcentage(int a,int b){
            double c = new Double(b);
     
            double resultat = a/c;
            double resultatFinal = resultat*100;
     
     
            DecimalFormat df = new DecimalFormat("###.##");
            return df.format(resultatFinal) + " %";
        }
    Et ainsi le test suivant passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public void testPourcentage() {
            String test = pourcentage(1, 3);
            assertEquals("33,33 %",test);
        }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Super ta réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        private static String pourcentage(int a,int b){
            double c = new Double(b);
     
            double resultat = a/c;
            double resultatFinal = resultat*100;
     
     
            DecimalFormat df = new DecimalFormat("###.##");
            return df.format(resultatFinal) + " %";
        }
    marche nickel a part qu'il aime pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double c = new Double(b);
    que j'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    double c = a;
            double d = b;
            double resultat = c/d;
            double resultatFinal = resultat*100;
            DecimalFormat df = new DecimalFormat("###.##");
            return df.format(resultatFinal) + " %";

  5. #5
    Membre chevronné Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Par défaut
    Le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double c = new Double(b);
    est possible en java 1.5 avec l'autoboxing :
    L'autoboxing est le processus de conversion d'un type primitif (int,long, ...) en objet (Integer,Long,...) et vice-versa de manière automatique.
    Mais ta méthode est très bien aussi

    Juste une petite précision : tu n'as pas besoin d'avoir tes deux opérateurs en double. Juste un suffit. Donc tu peux diviser un int par un double ou inversement et tu auras bien un nombre décimal

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

Discussions similaires

  1. Faire une seule ligne avec deux echo
    Par d10g3n dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 23/06/2008, 20h11
  2. Faire une liste avec deux éléments par ligne
    Par pc.bertineau dans le forum Mise en page CSS
    Réponses: 18
    Dernier message: 12/04/2007, 14h47
  3. Comment faire une classe avec deux form?
    Par Mickey.jet dans le forum Delphi
    Réponses: 10
    Dernier message: 04/07/2006, 18h23
  4. Faire une procédure stockée avec deux tables
    Par mister3957 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2006, 13h54
  5. Pourcentage avec deux chiffres après la virgule
    Par Oluha dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/03/2005, 13h47

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