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 :

Bug NumberFormat avec setMaximumFractionDigits


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut Bug NumberFormat avec setMaximumFractionDigits
    Bonjour,

    Je me confronte à un bug que je n'arrive pas à trouver dans des forums ou dans outils de "bug tracking".
    Ce que j'essaye de faire devrait être très simple. Comme NumberFormat arrondi par défaut les flottants au troisième chiffre après la virgule, je voudrais qu'il n'effectue pas cet arrondi. J'ai lu alors dans des forums qu'il était possible d'utiliser la méthode setMaximumFractionDigits et de lui donner Integer.MAX_VALUE comme paramètre.

    Dans cet exemple, je simplifie en fixant setMaximumFractionDigits à 10.
    Voici le code utilisé et les résultats bizarres que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void main(String[] args) {
    		NumberFormat fmt = NumberFormat.getNumberInstance(Locale.FRENCH);
    		fmt.setMaximumIntegerDigits(10);
    		fmt.setMaximumFractionDigits(10);
    		Float f = 100.124f;
    		if (fmt != null) {
    			System.out.println("float : " + f + " , format : " + fmt.format(f));
    		}
    	}
    Résultat :
    float : 100.1 , format : 100,0999984741
    Avec "Float f = 88888.1f" :
    float : 88888.1 , format : 88*888,1015625

    Avec "Float f = 100.1234567890f" :
    float : 100.12346 , format : 100,1234588623

    Qu'est ce qui ne tourne pas rond dans ma démarche ?
    Des connaisseurs peuvent-ils me renseigner ?

    Merci bcp !

  2. #2
    Membre expérimenté

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut
    Les float en Java on certaines problématiques pour leurs valeur.
    Il te faut passer par un objet spécifique en Java pour permettre de bon formatages.
    Lis la FAQ sur les calculs de précision pour comprendre rapidement :
    http://java.developpez.com/faq/java/...ecisionCalculs

    Pour ton code, il te suffit donc d'utiliser un BigDecimal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                BigDecimal bd = new BigDecimal(100.124);
                    System.out.println("bd : " + bd.floatValue() + " , format : " + fmt.format(bd));

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Oui, c'est exactement ça. Je m'étais encore jamais confronté à ce type de problème. Merci pour cette réponse rapide.

    Dans mon SI, j'ai besoin de valeurs précises. J'ai ainsi directement remplacé les "Float" en "BigDecimal" directement dans les modèles. Hibernate traduit cela en Numeric(p,s). Avec l'annotation @Column(precision = X, scale = Y), on peut alors configurer la précision désirée.

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

Discussions similaires

  1. [JDOM] Bug JDOM avec XHTML
    Par tipaquo dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 18/07/2008, 11h57
  2. [TP] Bug Graphique avec certaines configurations
    Par Ripley dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 29/01/2006, 18h23
  3. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11
  4. Réponses: 2
    Dernier message: 01/07/2004, 11h05
  5. Bug Xerces2_1_0 avec C++ et Linux ??
    Par _marie_ dans le forum XML
    Réponses: 2
    Dernier message: 24/09/2003, 07h49

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