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 :

[C#] Comment convertir une String en float ?


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut [C#] Comment convertir une String en float ?
    Bonjour,

    J'ai un problème de conversion. Je n'arrive pas à convertir une chaine de caractère et de le mettre en float. Pourtant les outils sont là pour le faire, je parle de float.Parse(la string); mais il me dit que ma string n'est pas dans le bon format???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float a = float.Parse("1.718257");
    Ne fonctionne pas, ca me donne une erreur "Input string was not in a correct format." C'est un FormatException

    Je cherche c'est quoi le problème et je n'arrive pas à trouver. J'ai essayer d'ajouter un f à la fin -> "1.718257f" et ca ne marche pas non plus. Je trouve ca bizarre, il y a de quoi qui m'échappe.

    Ce que je veut réussir à faire c'est de lire dans un fichier texte des coordonnées x,y,z. Je les prends les 3 sur une ligne et je les sépares avec un espace blanc pour les mettres dans un tableau de string. À partir de là je vais les convertirs en float...Malheureusement ca marche pas et ca me bloque...Une niaiserie!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                /* Read the number of vertice */
                stringBuffer = reader.ReadLine();
                nbVertice = int.Parse(stringBuffer);
     
                /* Read all vertices information */
                vertices = new float[nbVertice * 3];
                for (int i = 0,cmpt = 0; i < nbVertice; i++)
                {
                    stringBuffer = reader.ReadLine();
                    token = stringBuffer.Split(' ');
                    vertices[cmpt++] = float.Parse(token[1]);  // x  <-- Problème
                    vertices[cmpt++] = float.Parse(token[2]);  // y
                    vertices[cmpt++] = float.Parse(token[3]);  // z
                }
    Merci de m'aider

    DestinyWar45
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut Virgule
    Finalement je l'ai trouvé, c'étais un problème de virgule et de point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float a = Single.Parse("1,718251");
    Apparamment lorsque la valeur décimale est sous la forme d'une chaine de caractère il faut considérer la virgule à la place du point pour réussir à convertir de string à float.

    Dans le fichier toute les coordonnées possède un point alors je doit remplacer le '.' par la virgule. Lorsque les coordonnées ont été placer dans le fichier elles ont passé de float à string et dans la configuration interne c'est le point qui est utilisé alors il à été sauvegarder ainsi.

    Je savais que c'étais une niaiserie...C'est souvent ca qui nous fait perdre du temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                /* Read the number of vertice */
                stringBuffer = reader.ReadLine();
                nbVertice = int.Parse(stringBuffer);
     
                vertices = new float[nbVertice * 3];
                for (int i = 0,cmpt = 0; i < nbVertice; i++)
                {
                    stringBuffer = reader.ReadLine();
                    token = stringBuffer.Split(' ');
                    vertices[cmpt++] = float.Parse(token[1].Replace('.',','));  // x
                    vertices[cmpt++] = float.Parse(token[2].Replace('.', ','));  // y
                    vertices[cmpt++] = float.Parse(token[3].Replace('.', ','));  // z
                }
    DestinyWar45
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    C'est dangereux ce que tu fais. Tout dépend de ce que tu fais et pour qui. Ta solution ne marche que sur un OS français.

    Suivant si ta chaine e un '.' ou ',', je te conseille de changer temporairement (le temps de la conversion) la culture (System.Threading.Thread.CurrentThread.CurrentCulture).
    Par ex :
    Quand tu as un '.' : CurrentCulture = "en-US"
    Quand tu as un ',' : CurrentCulture = "fr-FR"

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut Langue
    Citation Envoyé par fregolo52
    C'est dangereux ce que tu fais. Tout dépend de ce que tu fais et pour qui. Ta solution ne marche que sur un OS français.

    Suivant si ta chaine e un '.' ou ',', je te conseille de changer temporairement (le temps de la conversion) la culture (System.Threading.Thread.CurrentThread.CurrentCulture).
    Par ex :
    Quand tu as un '.' : CurrentCulture = "en-US"
    Quand tu as un ',' : CurrentCulture = "fr-FR"
    Eh bien, je viens d'en apprendre...On a toujours à apprendre dans ce domaine là. Merci pour cette information.

    Je me demandais bien pourquoi mes objets étais que visible sur des OS francais, sur le coup j'ai pas fait le lien mais après t'avoir lu j'ai réalisé ce cas. Tu viens de m'éviter de longue heure de débogage, oufff ca fait plaisir ca.

    J'ai adopté mon code pour qu'il soit indépendant de la langue de l'OS, je l'ai mis US pour évité d'avoir à changer le point en virgule. Maintenant ca marche sur tout les OS langue confondu.

    Encore merci!

    DestinyWar45
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Sos
    salut
    o fait je suis debutant en c# et j'ai eu le meme probleme que vous par rapport au float (. et ,) c'est surtout par rapport au OS s'il est francais ou anglais alors SVP si vous pouvez m'aider sur c truc en m'expliquant comment faire!!! juste un petit exemple. Merci!!

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ca ne marche pas si tu utilises Convert.ToDouble ou Convert.ToDecimal ? suivant, ce dont tu as besoin

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Salut:
    Citation Envoyé par nico-pyright(c) Voir le message
    ca ne marche pas si tu utilises Convert.ToDouble ou Convert.ToDecimal ? suivant, ce dont tu as besoin
    l'aide de Visual Studio dit :
    Convert:
    Cette API prend en charge l'infrastructure .NET Framework et n'est pas destinée à être utilisée directement à partir de votre code.
    quand on l'utilise ça marche mais je ne sais trop rien pourquoi on doit pas les utiliser directement.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Autre solution
    Avec ce code on peut faire aussi ce que l'on veut sans avoir à changer le CurrentCulture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Double mySalary = StrToDouble("12345678.12", '.', 100);
    Double monSalaire = StrToDouble("12345678,12", ',', 100);
     
    Double StrToDouble(string sVal, char Separator, long Precision)
     {
        string[] sDouble;
        Double Val;
     
        sDouble = sVal.Split(new char[1] { Separator });
        Val = Convert.ToInt64(sDouble[0]) * Precision + Convert.ToInt64(sDouble[1]);
        return Val / Precision;
     }

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

Discussions similaires

  1. Comment convertir une String en Color ?
    Par nounou0018 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/04/2010, 11h11
  2. Comment convertir une string en char C++
    Par Contractofoued dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/06/2008, 15h19
  3. Réponses: 2
    Dernier message: 25/10/2006, 18h09
  4. Comment convertir une string en boolean ?
    Par olivier12345600 dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2005, 15h54

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