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 :

[Java]Conversion de float en String et inversement


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut [Java]Conversion de float en String et inversement
    Bonjour,

    Petite question toute bête mais qui me prends pas mal la tête ..

    J'ai une String qui contient la chaine "9999999999"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String maString = "9999999999";
    J'affecte dans une variable de type float le contenu de cette chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float monFloat = Float.parseFloat(maString);
    monFloat contient alors la valeur "1.0E10"

    Je souhaite maintenant récupéré la valeur de monFloat dans une autre String.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String monAutreString = Float.toString(monFloat);
    Et monAutreString contient alors la chaine "1.0E10"

    Comment faire pour que monAutreString contienne la valeur du float sans exposant, c'est à dire la valeur initiale "9999999999" ?

    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Bonjour,

    Es-tu sûr qu'il existe une représentation de ton nombre dans le type float?



    EDIT: Pour un meilleur formatage, utilise la classe DecimalFormat.
    Bien le bonjour chez vous
    Jowo

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Merci pour ta réponse.

    Je pense qu'il existe une représentation de mon nombre dans le type float car si je me souviens bien les floats peuvent à aller de -1.4*10^-45 à 3.4*10^38.

    DecimalFormat permet de faire du formatage mais avec des patterns et des Locale, il n'existe pas un système plus simple pour convertir mon float en notation décimale et pas exponentielle ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par djoukit
    Merci pour ta réponse.

    Je pense qu'il existe une représentation de mon nombre dans le type float car si je me souviens bien les floats peuvent à aller de -1.4*10^-45 à 3.4*10^38.

    DecimalFormat permet de faire du formatage mais avec des patterns et des Locale, il n'existe pas un système plus simple pour convertir mon float en notation décimale et pas exponentielle ?
    Je ne sais pas s'il existe un système plus simple. Il me semble que ce n'est pas trop compliqué (voir code).

    Encore une remarque sur les floats: ce que nous a montré est le domaine des valeurs possibles pour un float.
    Mais malheureusement, dans ce domaine, il existe une infinité de nombre et on ne peut représenter qu'une quantité limitée de tous ces nombres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            DecimalFormat decimalFormat = (DecimalFormat)DecimalFormat.getInstance();
                    decimalFormat.applyPattern("#0.##");
     
            /* Test  sur les floats */
            float n = 0.0f;
            float p = 0.0f;        
            do {
                n = p;
                p = p + 1.0f;
            } while (n != p);
            System.out.println(decimalFormat.format(p));
    Bien le bonjour chez vous
    Jowo

  5. #5
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Citation Envoyé par djoukit
    Je pense qu'il existe une représentation de mon nombre dans le type float car si je me souviens bien les floats peuvent à aller de -1.4*10^-45 à 3.4*10^38.
    Hello.
    La précision diminue avec l'accroissement de la valeur de ton float. Du coup, ton 999... est arrondi.
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Merci à vous deux pour vos remarques.

    Effectivement, le type float a 6 ou 7 décimales significatives ce qui explique que le nombre soit arrondi.

    Par contre, le problème du DecimalFormat est qu'il utilise un pattern et une locale et du coup mon séparateur décimal "." est remplacé par une virgule ",".

  7. #7
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par djoukit
    Merci à vous deux pour vos remarques.

    Effectivement, le type float a 6 ou 7 décimales significatives ce qui explique que le nombre soit arrondi.

    Par contre, le problème du DecimalFormat est qu'il utilise un pattern et une locale et du coup mon séparateur décimal "." est remplacé par une virgule ",".
    Un peu de curiosité que diable. Tout est dans la doc et probablement il doit exister une article sur ce sujet dans la FAQ.

    Un petit bout de code (pas compliqué):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            float f = 1234560.789f;
            DecimalFormat decimalFormat = (DecimalFormat)DecimalFormat.getInstance();
            System.out.println("Default Pattern: " + decimalFormat.toPattern());
            decimalFormat.applyPattern("#,##0.00");
            DecimalFormatSymbols dfs = new DecimalFormatSymbols();
            dfs.setDecimalSeparator(',');
            dfs.setGroupingSeparator('\'');
            decimalFormat.setDecimalFormatSymbols( dfs );
            System.out.println(decimalFormat.format(f));
    Sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Default Pattern:  #,##0.###
    1'234'560,75
    J'ai le contrôle total sur le format.

    Tu permets un petit conseil?

    Lis la doc et habitue-toi à faire des bouts de code pour expérimenter les possibilités d'un classe. Tout celà ne m'as pris plus de 20 minutes.
    Bien le bonjour chez vous
    Jowo

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Pas de problème jowo, j'ai fait la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            DecimalFormat decimalFormat = (DecimalFormat)DecimalFormat.getInstance(Locale.FRENCH);
            decimalFormat.applyPattern("0.#");
    Comme ça j'arrive à obtenir les chaines que je souhaite.

    Mais je me demandais juste s'il n'existait pas une méthode toute simple pour passer un float d'une écriture avec exposant à une écriture décimale.

Discussions similaires

  1. Conversion du type int en String et inversement
    Par sheridan08 dans le forum Débuter
    Réponses: 1
    Dernier message: 20/10/2012, 13h56
  2. [Java] Conversion String en Hexa
    Par Altrensa dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2010, 14h32
  3. conversion de float en string
    Par Spont dans le forum C
    Réponses: 4
    Dernier message: 15/05/2007, 16h27
  4. [Java] conversion String/Int
    Par maxime17s dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2007, 17h42
  5. [xsl java]Appliquer une XSL à un String contenant doc XML
    Par aldo047 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/04/2003, 15h46

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