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 : problème de format


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut DecimalFormat : problème de format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DecimalFormat df = new DecimalFormat("#0.00",'.,'); 
    Number value = df.parse("3.00"); 
    System.out.println("value:"+df.toPattern());
    malgré le forçage des 2 chiffres après la virgule, la chaîne générée est égale à 3 au lieu de 3.00.
    du coup, losrque que je veux mettre la valeur dans un Double, je récupère l'exception : java.lang.ClassCastException : java.lang.Long

    pour quelle raison, ce format n'est-il pas pris en compte ?

  2. #2
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Salut, si tu fais ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DecimalFormat df = new DecimalFormat("###,##0.00");

  3. #3
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    bonjour,

    au pire il y a la méthode bourrin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int a=3;
    double b;
    a=a*100;
    b=a/100;

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Voui, pour l'instant je m'en tire avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(data[iRowPos][i] instanceof Long) db = Double.valueOf(data[iRowPos][i].toString());
    mais cela me parait plus que douteux. Il doit y avoir quelque chose de plus sensé...

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu confonds la valeur d'un objet et sa représentation.
    Pour l'oeil "3" est bien différent de "3.00", mais au niveau logique numérique, "3" est égal à "3.00" qui est égal à "3.000000"...

    Les types numériques représentent une valeur numérique (entière ou réel), mais ils n'ont aucun format d'affichage associé.

    Ainsi lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Number value = df.parse("3.00");
    Tu crée un objet Number représentant la valeur numérique de "3.00", mais ce nombre n'est pas associé au format que tu as utilisé pour le générer.

    Ainsi lorsque tu affiches la valeur de l'objet, c'est un format par défaut qui est utilisé, qui par défaut n'affiche pas les zéros inutiles...


    Si tu veux utiliser le même format pour l'affichage il faut le formatter, toujours avec le DecimalFormat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println( value );		// 3
    System.out.println( df.format(value) );	// 3.00
    a++

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Le problème ne réside pas dans la réprésentation visuelle, mais dans la classe retournée par Java. Il s'agit ici de cellule d'une JTable, que je force pourtant au départ à Double. Seulement, lorsque j'édite cette cellule et entre une valeur entière en suprimant les décimales, le contenu de la cellule Object[][] voit sa classe passer de Double.class à Long.Class. D'où mon problème de Cast par la suite.

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

Discussions similaires

  1. Problème de format de pixel
    Par charliejo dans le forum OpenGL
    Réponses: 7
    Dernier message: 21/03/2005, 11h45
  2. Problème de format de currency
    Par gandf dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/01/2005, 13h36
  3. Réponses: 14
    Dernier message: 06/08/2004, 15h12
  4. [CR8] Problème de Format d'affichage
    Par khabch dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 19/02/2004, 14h10
  5. Problème de Format de date
    Par titititi007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2003, 08h19

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