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 :

DecimalFormat et double


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut DecimalFormat et double
    Bonjour,

    Je cherche le bon pattern à donner au Decimalformat pour obtenir le comportement suivant :
    * 1.0 => 1
    * 0012.344 => 12.344
    * 45.678954 => 45.678954
    * 1.45000 => 1.45

    Je souhaite que si le nombre décimal ne possède pas de partie décimale alors celui-ci est affiché comme un entier. Dans le cas où il possède une partie décimale (pas de taille fixe sur le nombre de chiffres avant la vigule et pas de taille fixe sur le nombre après la virgule) alors celui-ci est affiché sans les zéros superflux.

    Je vous remercie par avance de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Il suffit de définir le nombre minimum et maximum de fraction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	DecimalFormat df = new DecimalFormat();
    	df.setMinimumFractionDigits(0);
    	df.setMaximumFractionDigits(Integer.MAX_VALUE);

    Par contre il peut y avoir des résultats "surprenants" selon l'approximation du double...


    a++

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Normalement tu devrais utiliser 0.###### avec autant de # que nécessaire pour dire où tu veux aller dans les décimales.
    Cela indique qu'il ne faut rien mettre si le nombre ne contient plus que des zéros à partir de là, mais qu'il faut le mettre si c'est un chiffre ou qu'il reste des chiffres.

    Mais tu as dit "pas de taille fixe sur le nombre après la virgule." Ça, ça n'existe pas.
    Les doubles, comme tous les nombres à virgule flottante, sont des valeurs approchées et non pas exactes. Les nombres 12.344 ou 45.678954 ou 1.45 n'existent pas en double. À la place, le compilateur prendra des valeurs approchées, qui ont énormément de chiffres après la virgule. Par conséquent, si tu cherches à afficher tous les chiffres après la virgule, ce ne sera pas 12.344 mais 12.3439999999999994173549566767178475856781005859375
    Tu n'as donc pas d'autre choix que de décider un nombre de chiffres après la virgule que tu veux afficher.

    Ou alors travailler avec autre chose que des nombres à virgule flottante, comme BigDecimal. Mais c'est très lourd à programmer et les performances de calcul seront très mauvaises.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Merci de vos réponses, suites à votre remarques, j'ai donc fait le choix de mettre autant de # que le permettait le stockage en BDD. J'ai de plus ajouté un commentaire dans la méthode de formattage, comme ca si cela vient à changer le développeur sera au courant.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Après réflexion, setMaximumFractionDigits() serait plus intelligent que d'amasser des # côte à côte, pour le même effet.
    J'y avais pas pensé parce que je travaille toujours en NumberFormat format = new DecimalFormat(truc);, mais ce n'est peut-être pas une bonne idée finalement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Conversion d'un Decimalformat en double
    Par encours dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2011, 18h42
  2. Réponses: 2
    Dernier message: 27/01/2009, 10h30
  3. abs pour un long double
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 23/07/2003, 16h16
  4. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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