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

Java Discussion :

[BigDecimal] Fonction egal


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Par défaut [BigDecimal] Fonction egal
    Bonjour,

    J'ai essayé de faire une fonction egale avec des BigDecimal et je n'ai reussi qu en leur appliquant un arrondi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BigDecimal tota = new BigDecimal(tot).setScale(2, BigDecimal.ROUND_HALF_EVEN);
    BigDecimal cent = new BigDecimal("100").setScale(2, BigDecimal.ROUND_HALF_EVEN);
    if(tota.equals(cent))
            System.out.println("egal");
    else
            System.out.println("different");
    Si je n'applique pas le setScale() il me trouve par exemple que 100 est différent de 100.0
    Existe-il un moyen plus simple afin de tester l'egalité avec les BigDecimal ?

  2. #2
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Malheureusement, la méthode equals de BigDecimal compare le scale.

    Mais tu peux utiliser CompareTo, qui, avant de comparer les 2 objets les met au même scale (le plus grand des 2).

    Ce que tu pourrais faire aussi, c'est soit te faire un méthode perso quelque part pour comparer les bigdecimal, soit faire une classe MonBigDecimal en surchargeant equals de façon à ce qu'il ne compare pas le scale. (Ne pas oublier de surcharger aussi hashCode dans ce cas, puisqu'il se sert aussi du scale)

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Par défaut
    Merci de ta réponse je vais donc plutot utiliser compareTo()
    Sinon je vois pas du tout comment surcharger equals() pour qu'il ne prenne pas en compte le scale...

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par e1lauren
    Merci de ta réponse je vais donc plutot utiliser compareTo()
    Sinon je vois pas du tout comment surcharger equals() pour qu'il ne prenne pas en compte le scale...
    Tout simplement en faisant return compareTo(...) == 0; dans equals(...).

    C'est bizarre qu'ils aient fait une telle chose dans la JDK (une erreur je pense), car il est conseillé que pour tout Comparable, la propriété .compareTo(...) == 0 ==> .equals(...) soit vraie...

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Par défaut
    Effectivement la question etait plutot conne
    Mais en fait je vois pas trop l'interet de refaire une classe, il suffit d'utiliser compareTo() a la place de equals(). Enfin encore faut il le savoir ...

  6. #6
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Citation Envoyé par ®om
    C'est bizarre qu'ils aient fait une telle chose dans la JDK (une erreur je pense), car il est conseillé que pour tout Comparable, la propriété .compareTo(...) == 0 ==> .equals(...) soit vraie...
    Ce n'est pas une erreur, ils respectent parfaitement la documentation.

    Dans Comparable on trouve :
    Citation Envoyé par Doc de Comparable
    * It is strongly recommended, but <i>not</i> strictly required that
    * <tt>(x.compareTo(y)==0) == (x.equals(y))</tt>. Generally speaking, any
    * class that implements the <tt>Comparable</tt> interface and violates
    * this condition should clearly indicate this fact. The recommended
    * language is "Note: this class has a natural ordering that is
    * inconsistent with equals."
    Et dans BigDecimal :
    Citation Envoyé par Doc de BigDecimal
    * Note: care should be exercised if BigDecimals are to be used as keys in a
    * SortedMap or elements in a SortedSet, as BigDecimal's <i>natural
    * ordering</i> is <i>inconsistent with equals</i>. See Comparable, SortedMap
    * or SortedSet for more information.

  7. #7
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut
    question : comment comparer une variable de type BigDecimal au nombre 1000 ?

    ne fonctionne pas

    non plus

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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