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

C# Discussion :

Conversion float en string [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut Conversion float en string
    Bonjour,

    J'ai 2 gridview générés dynamiquement qui ont chacun un total (float) .
    Je souhaite afficher la somme de ces 2 totaux dans un libellé mais je n'arrive pas à convertir en string la somme de ces 2 float :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     float total_gen = float.Parse(((Label)this.PAUSE_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text)+float.Parse(((Label)this.PLATEAU_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text); 
     MONTANT_TOTAL.Text = total_gen.ToString();
    pour ce code j'ai l'erreur "Input string was not in a correct format. "


    Si j'affiche directement sans faire de somme, j'affiche pourtant bien le total1 dans le libellé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONTANT_TOTAL.Text = ((Label)this.PAUSE_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text;
    Auriez-vous une idée du problème ?

    Merci d'avance.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    ton souci c'est pas la conversion float>string mais string>float.
    Et comme d'hab', je pense que le souci vient de la Culture :
    tu lui files à manger des '.' (point) comme séparateur décimal mais lui veut des ',' (virgule), ou inversement.

    La meilleure solution sera de préciser la Culture lors du parse, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float f = float.Parse("3.12", CultureInfo.InvariantCulture);
    Bon dev.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    599
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 599
    Points : 2 024
    Points
    2 024
    Par défaut
    Bonjour,

    Oups : le temps de rédiger ce message on vous a déjà répondu ....

    Citation Envoyé par davelop Voir le message

    Si j'affiche directement sans faire de somme, j'affiche pourtant bien le total1 dans le libellé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MONTANT_TOTAL.Text = ((Label)this.PAUSE_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text;
    Vous mettez un string dans un string, normal que cela ne pose pas de problème.
    Visiblement c'est le float.Parse( ) qui ne reconnait pas la chaîne comme un float.
    Cela peux tout simplement venir du format international des nombres.

    Sur un système français, float.Parse("123.45") provoquera exactement votre message d'erreur, parce que le séparateur décimal en France n'est pas le point, mais la virgule.

    Il faut donc soit utiiser la virgule dans les chaînes (en France, c'est mieux et plus propre), soit une version de Parse qui utilise un IFormatProvider.

    Ca va être quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                 System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
                 float f = float.Parse("123.45", culture.NumberFormat);
    --
    vanquish

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut
    Bonjour à vous deux et merci pour vos réponse rapide.

    Alors j'ai essayé ce code comme vous me l'avez indiqué mais j'ai toujours la même erreur. Est-ce que je n'ai pas bien compris le principe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
    float total_gen = float.Parse(((Label)this.PAUSE_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text, culture.NumberFormat);
    MONTANT_TOTAL.Text = total_gen.ToString();

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Le truc c'est qu'en Culture en-US le point ET la virgule sont acceptés (le point pour le séparateur décimal et la virgule pour la séparation des milliers). Du coup tu ne devrais pas planter mais avoir un résultat faux. Si tu as toujours un plantage m'est avis que t'essaies de lui filer une chaîne vide à parser.
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut
    En effet c'était le problème car à l'ouverture le total de la gridview est vide, j'ai donc essayé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
     
    if (!String.IsNullOrEmpty(((Label)this.PAUSE_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text))
    {
      total_gen = float.Parse(((Label)this.PAUSE_GRIDVIEW.FooterRow.Cells[3].Controls[0]).Text, culture.NumberFormat);  
      MONTANT_TOTAL.Text = total_gen.ToString();
     }
    Par contre à l'affichage de MONTANT_TOTAL.Text, je n'ai plus le séparateur 'virgule' ou 'point' du float

  7. #7
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    A vue de nez c'est que c'est que c'est pas la bonne Culture que tu as choisie. Comme dit juste avant, la virgule est acceptée en en-US mais correspond à un séparateur de milliers (on fait simplement comme si ce caractère n'existait pas). Du coup si tu tentes de parser "3,14" il va penser que tu lui dit simple "314". En fin de compte tout laisse à penser que ton erreur d'origine c'est simplement la chaine vide passée au parse, et que la Culture d'origine par défaut (fr-FR ou équivalent) est celle dont tu as besoin.

    Bon dev.
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 207
    Points : 85
    Points
    85
    Par défaut
    Ah oui c'est exactement ça...
    Depuis le début c'était en raison du fait que le float était vide...

    Désolé et merci pour vos aides !
    J'aurai au moins appris des choses grâce à vous.

    Bonne journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/06/2008, 14h35
  2. conversion float-string, probleme de precision.
    Par KINENVEU dans le forum Général Python
    Réponses: 2
    Dernier message: 18/01/2008, 08h47
  3. conversion de float en string
    Par Spont dans le forum C
    Réponses: 4
    Dernier message: 15/05/2007, 16h27
  4. [conversions] float to std::string
    Par poukill dans le forum SL & STL
    Réponses: 4
    Dernier message: 08/03/2007, 11h46
  5. [Java]Conversion de float en String et inversement
    Par djoukit dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2005, 11h55

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