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 :

Convertir chaines en float


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut Convertir chaines en float
    Bonjour

    J'ai un problème pour convertir une chaine de caractères en nombre flottant.
    Je sais que la représentation des float dépend de l'implémentation et n'est donc pas toujours la même que pour un humain. Mais dans mon cas, aucun nombre après la virgule n'est converti correctement.
    En effet, j'ai par exemple la chaine "2.5". La conversion donne toujours 2.0. Idem, j'ai du "6.5", ça donne du 6.0. C'est normal ?
    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        for(i= 0 ; i<10 ; i++)
        {
            temps[i] = strtod(tps_[i], NULL);
        }
    Je ne sais pas si ça a une importance mais tps_[i] est récupéré depuis une GtkEntry (GTK+) et est de type const gchar. temps[i] est de type double.

    Nas'

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Et un "sscanf" ne te conviens pas ?

  3. #3
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Je suis passé par sscanf() avant d'essayer strtod(). Mais le résultat est exactement le même.
    Pour information, je travaille sous Linux avec Ubuntu Breezy.

    Nas'

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    C'est normal ?
    Peut être:
    avec strtof ça donne quoi?

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Ce ne searit pas lep roblème de la virgule au lieu du . par hasard ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Ce ne searit pas lep roblème de la virgule au lieu du . par hasard ?
    C'était ça Pourtant, j'ai toujours effectuer la conversio avec un point.
    Ca m'embête cette histoire... je vais devoir faire des modifications trop importantes
    Merci en tout cas et désolé pour le dérangement.

    Nas'

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Nasky
    C'était ça Pourtant, j'ai toujours effectuer la conversio avec un point.
    Ca m'embête cette histoire... je vais devoir faire des modifications trop importantes
    Merci en tout cas et désolé pour le dérangement.

    Nas'
    Ah je n'avais pas vu que ton probleme était ça....désolé pour le post d'avant.

  8. #8
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double strtod (const char *nptr, char **endptr);
    Si endptr n'est pas NULL, un pointeur sur le caractère suivant le dernier caractère converti y est stocké.

    Essaye de modifier ton code pour voir ce que contient endptr.

  9. #9
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Chez moi quand j'execute ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
        float x;
        char tab[] = "2.5";
     
        sscanf(tab,"%f",&x);
        printf("%f\n", x);
     
        return EXIT_SUCCESS;
    }
    Ca me donne :

  10. #10
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Sous Linux, ça doit être différent...

    Nas'

  11. #11
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Nasky
    Sous Linux, ça doit être différent...

    Nas'
    Je suis sous linux (Debian Sarge)

  12. #12
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Effectivement, un code basic comme le tien marche bien chez moi aussi.
    Donc le problème doit venir de GTK mais je vois pas d'où exactement.
    Quand j'affiche avec un printf() le contenu récupéré du GtkEntry, j'ai bien la chaine "2.5" par exemple. Ensuite j'applique exactement le même code et là j'ai juste du 2.0 en sortie...
    Faut absolument que je trouve d'où ça vient parce que je ne peux modifier le contenu du fichier qui représente tous les nombres avec un point. A moins de créer une fonction qui se charge de remplacer le point par une virgule mais bon, avant de me lancer, je vais essayer de trouver d'où ça vient.

    Nas'

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

Discussions similaires

  1. Convertir chaine de caractère en float C#
    Par StephaneCapponi dans le forum C#
    Réponses: 18
    Dernier message: 23/04/2015, 16h57
  2. Convertir une chaine en float
    Par P.G dans le forum Débuter
    Réponses: 2
    Dernier message: 20/12/2013, 09h51
  3. [XSLT]Convertir une chaîne en float, int etc ... avec XSL
    Par wozzz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/05/2006, 10h12
  4. Convertir chaine de caractere
    Par Antoine NSG dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2005, 15h32
  5. [FLASH MX2004] Convertir chaine en date
    Par stip dans le forum Flash
    Réponses: 5
    Dernier message: 20/01/2005, 17h01

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