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

API standards et tierces Java Discussion :

Comment représenter POSITIVE_INFINITY comme valeur de BigDecimal ?


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Comment représenter POSITIVE_INFINITY comme valeur de BigDecimal ?
    Chers,
    J'ai consulté 'FAQ Java', 'Les meilleures API de Java' et http://java.sun.com/javase/6/docs/api/ , mais en vain --> nouvelle discussion, quand même.

    Les volumineuses données d'entrée de mon application sont disposées dans des fichiers distincts comportant principalement une structure de 'new Object[]' où se trouvent des String, null, new BigDecimal(float), new Boolean et encore d'autres new Object[]. Mon parser marche bien.

    J'ai besoin que la valeur de 'BigDecimal's représente dans certains cas l'infini. Dans l'API BigDecimal de Sun, je n'ai pas trouvé une constante 'POSITIVE_INFINITY' telle que 'ROUND_CEILING', 'ONE', ... Cela ne serait-il pas prévu ? Comment palier à cette lacune ?

    Merci d'avance.

  2. #2
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Bonjour,

    API BigDecimal n'a pas de NaN ou +/- INFINITY (pour l'instant) comme le Double. Par contre tu peux definir ton "BigDecimal INFINITY" avec la valeur max desiree

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut BigDecimal( POSITIVE_INFINITY )
    Merci ttttnht pour ta réponse.

    Pour définir 'mon' BigDecimal(POSITIVE_INFINITY) avec la valeur Double la plus grande possible, il n'y aurait donc vraiment rien de plus simple que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        private static Double       infini1 = new Double(Double.POSITIVE_INFINITY);
        private static double       infini2  = infini1.doubleValue();
        private static BigDecimal   positive_infinity = new BigDecimal(infini2);
    ?
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        private static BigDecimal positive_infinity = new BigDecimal(
            new Double(Double.POSITIVE_INFINITY).doubleValue() );
    ?

    Les constantes de Double (MAX_VALUE, POSITIVE_INFINITY, ...) étant inclues dans la classe 'Double', celle-ci dans le package 'java.lang' et celui-ci par défaut dans tout fichier source Java, il est inutile de déclarer
    import java.lang.Double;

    M'a aussi surpris : MAX_VALUE <> POSITIVE_INFINITY

    Pour toute réponse, merci d'avance.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut BigDecimal( POSITIVE_INFINITY )
    et comment se fait-il qu'après avoir inclu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        private static final double positive_infinity = 
                            new Double(Double.POSITIVE_INFINITY).doubleValue();
    parmi mes propriétés de classe, le débugger refuse de fonctionner dès que j'insère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        System.out.printf("%d\n", positive_infinity);
    p.ex. dans le constructeur de ladite classe ?

    (NetBeans 6.1)
    Merci.

  5. #5
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    BigDecimal ne supporte pas ce genre de chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BigDecimal positive_infinity = new BigDecimal(
            new Double(Double.POSITIVE_INFINITY).doubleValue() );
    Cette declaration va generer une exception quand tu executes ton programme.

    POSITIVE_INFINITIVE <> MAX_VALUE:
    c'est normal, MAX_VALUE c'est une valeur max (en double ou integer)
    par contre POSITIVE_INFINITIVE n'a pas de valeur fixe.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    contrairement aux double / float, big decimal a une précision exacte. On ne peux pas représenter l'infini avec un valeur entière ou réel exacte (pour rappel, "l'infini" n'est pas un réel). L'infini est représenté dans les float par une position de bits particulière et réprésente un nombre trop grand pour être stocké dans le float / double. Extrait javadoc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public BigDecimal(double val)
        .....
        Parameters:
            val - double value to be converted to BigDecimal. 
        Throws:
            NumberFormatException - if val is infinite or NaN.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/04/2015, 14h09
  2. Comment représenter des intervalles de valeurs pour un champ?
    Par dedelem dans le forum Modélisation
    Réponses: 1
    Dernier message: 14/04/2008, 17h50
  3. Réponses: 7
    Dernier message: 29/06/2007, 15h39
  4. Comment vérifier que la valeur d'un champ soit unique?
    Par le lynx dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2005, 14h11
  5. Comment changer dynamiquement la valeur d'une option de DbGrid ?
    Par Atrebate62 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/03/2005, 13h35

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