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

Langage Java Discussion :

[Calcul] difficulté avec BigDecimal


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de dinver
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 122
    Par défaut [Calcul] difficulté avec BigDecimal
    Bonjour,
    J'ai des difficultés à utiliser cette classe. Elle me parait assez bizaroïde !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		BigDecimal res = new BigDecimal(1);
    		res.multiply(new BigDecimal(6));
    		System.out.println(res.toString());
    En exécutant ce code j'ai comme résultat 1 alors que je dis à priori ça devrais afficher 6. Je ne comrpends pas pourquoi ? Quelqu'un peut m'aider ? Merci par avance.

    Je ne sais pas si cette classe la meilleur. Je veiux faire du calcul réel et précis. J'ai lu que cette classe ne permet pas d'avoir des calculs avec précision pour des réels ! Alors quelle classe utiliser ?

    Je vous remercie par avance pour votre aide.

  2. #2
    Membre confirmé Avatar de dinver
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 122
    Par défaut
    J'ajouterais comment faire avec du bigdecimal somme = somme + 2
    La fonction INC ne permet de passer en paramètre un bigdecimal

    merci

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    cette classe fonctionne très bien, mais il faut lire la doc avant de se plaindre.... La classe BigDecimal, comme la plupart des classes de valeurs, est immuable: son état est figé dès la construction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BigDecimal bd1 = BigDecimal.valueOf(2);    
    BigDecimal bd2 = BigDecimal.valueOf(6);
    BigDecimal res1 = bd1.add(bd2);
    BigDecimal res2 = bd1.multiply(bd2);
    System.out.println(res1);
    System.out.println(res2);
    Quant à la précision, c'est ce qui se fait de mieux avec java.......

    Citation Envoyé par Javadoc
    The BigDecimal class gives its user complete control over rounding behavior. If no rounding mode is specified and the exact result cannot be represented, an exception is thrown; otherwise, calculations can be carried out to a chosen precision and rounding mode by supplying an appropriate MathContext object to the operation. In either case, eight rounding modes are provided for the control of rounding. Using the integer fields in this class (such as ROUND_HALF_UP) to represent rounding mode is largely obsolete; the enumeration values of the RoundingMode enum, (such as RoundingMode.HALF_UP) should be used instead.

    When a MathContext object is supplied with a precision setting of 0 (for example, MathContext.UNLIMITED), arithmetic operations are exact, as are the arithmetic methods which take no MathContext object. (This is the only behavior that was supported in releases prior to 5.)

  4. #4
    Membre confirmé Avatar de dinver
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 122
    Par défaut
    je n'arrive pas à effectuer une opération de division simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BigDecimal t4 = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3)); //ligne 17
    l'erreur suivante est affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    	at java.math.BigDecimal.divide(Unknown Source)
    	at Test.main(Test.java:17)
    Merci par avance pour l'aide

  5. #5
    Membre confirmé Avatar de dinver
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 122
    Par défaut
    J'ai résolu le prb en effectuant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BigDecimal t4 = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3), MathContext.DECIMAL128);
    Mais une question reste pourquoi si je mets MathContext.UNLIMITED ca marche pas ! Et comment afficher la valeur exacte càd je veux par exemple afficher 1000 chiffres après la virgule. J'ai pas trouvé la bonne méthode malgré que j'ai cherché dans le javadoc

    Merci

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

Discussions similaires

  1. [AC-2007] Difficulté avec Champs calculé
    Par andre61 dans le forum Access
    Réponses: 2
    Dernier message: 30/06/2010, 16h38
  2. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53
  3. Difficultés avec - onchange - !
    Par zakuli dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/07/2005, 12h00
  4. [calcul] pb avec la syntaxe d'une expression calulée
    Par gloogloo dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 29/06/2005, 17h14
  5. Difficultés avec TMenuItem.OnDrawItem
    Par ybruant dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/01/2005, 11h07

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