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 de type double en texte


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Conversion de type double en texte
    Bonjour,

    Je voudrais savoir quelle serrait la bonne méthode pour transformer une variable numérique de type double en chaine de caractère.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    sprintf() si rien d'autre n'est disponible, snprintf() standard C99 sinon.

    Sous Windows, snprintf() n'est pas disponible, mais _snprintf() l'est pour des vieux systèmes (attention, tu dois ajouter toi-même le zéro terminal à la fin de ton buffer) et _snprintf_s() est disponible avec Visual 2005.


    En C++, on utilise les ostringstream.

  3. #3
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Hmm,

    J'ai du mal m'exprimer.

    J'ai une variable de type double.

    Contenant par exemple la valeur 445.60499.

    Je voudrais transfoirmer cette variable de type double en char ou string. Quelle serrait la bonne façon de faire ?

  4. #4
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    e voudrais transfoirmer cette variable de type double en char ou string. Quelle serrait la bonne façon de faire ?
    Qu'entends-tu exactement par là, car Médinoc t'a donné la bonne solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(buf, "%ld", var_double);

  5. #5
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    sprintf() si rien d'autre n'est disponible
    En effet, voir ce lien:
    http://c.developpez.com/faq/c/?page=...RINGS_strtonum

  6. #6
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par Trap D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(buf, "%ld", var_double);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(buf, "%lf", var_double);
    C'est un double, pas un long

    A+

  7. #7
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Tout à fait Foobar1329

  8. #8
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Ok après test je vais peut être y arriver.

    Je vous remercie beaucoup pour votre aide.

    Bonne journée

  9. #9
    Invité
    Invité(e)
    Par défaut Et l'alloc ?
    Oui, mais sprintf ecris dans une chaine deja allouée !

    Comment faire une fonction qui renvoie la taille nécéssaire pour ecrire le nombre ? Ou une a qui on passe un pointeur sur une chaine ?

    Merçi !

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    En c99, tu es supposé avoir la fonction snprintf(), qui accepte un pointeur NULL et retourne toujours la taille nécessaire (mais il faut ajouter 1 pour le caractère nul).

    Mais comme tu ne l'as pas toujours (et elle ne renvoit pas toujours la bonne valeur), tu peux utiliser des extensions:
    • asprintf(), sous certains systèmes unixoïdes, fait un sprintf() et un malloc() en même temps
    • _scprintf(), sous Win32, te donne la taille nécessaire.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Il faudrait faire comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Il faut : %ld caracteres\n", sprintf(NULL, "%d", double1 + double2 ));
    Ca marche pas ! ,je vais me pencher sur tes autres propositions !

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par guimers
    Il faudrait faire comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Il faut : %ld caracteres\n", sprintf(NULL, "%d", double1 + double2 ));
    Ca marche pas ! ,je vais me pencher sur tes autres propositions !
    C'est snprintf(), pas sprintf()... et il faut un compilateur (et une bibliothèque) C99.

    Mais c'est plutôt tordu comme manip. Personnellement, j'utiliserais un tableau de char d'une taile fixe raisonable, genre 32 ou 64 char...

  13. #13
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Il y une formule il me semble liée au log qui donne le nombre de caractères nécessaires pour écrire le nombre.
    nbcar = E(Ln(nb)/Ln(10))+1 ou Ln(nb) est le Log népérien du nombre cherché et E la partie entière d'un nombre.

    [edit]J'ai complètement zappé le fait que c'est pour un nombre décimal, mes excuses
    Ça ne marche que pour les nombres entiers
    [/edit]

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bin je programme une calculette en GTK, donc j'aimerais pouvoir manipuler des chiffres grands, et avec de chiffres après la virgule sans problèmes.

    Faudrait pas que le prog. plante juste parce que l'utilisateur rentre 1111111111111111111111111111,22222222222222222222222222222222 !

    Quel est le nombre Max de chiffres avant et après la virgule ?

    EDIT: je vais tester cette formule !

    EDIT2: J'arrive pas trop moi : ((int)resultat) * (log(resultat) / log(10)) +1
    J'obtient un nombre negetif abracadabrant ! ..

    EDIT3: Je viens de voir ton edit ! Yen a pas une pour les decimaux ?
    Dernière modification par Invité ; 14/10/2006 à 17h51.

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par guimers
    Bin je programme une calculette en GTK, donc j'aimerais pouvoir manipuler des chiffres grands, et avec de chiffres après la virgule sans problèmes.

    Faudrait pas que le prog. plante juste parce que l'utilisateur rentre 1111111111111111111111111111,22222222222222222222222222222222 !
    Avec fgets(), pas de risque de plantage. Au pire il y a troncage, et la fonction clean()

    http://www.developpez.net/forums/sho...62&postcount=5

    peut être modifiée pour le signaler dans son code retour.

    Quel est le nombre Max de chiffres avant et après la virgule ?
    Il y a tout un tas de constantes définies à cet usage dans <float.h>. J'avoue ne pas m'en souvenir précisément...

    Comme on contrôle l'entrée. On peut donc estimer quel sera le plus grand nombre possible et dimensionner la chaine de résultat en conséquence.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Pourquoi me parles-tu de fgets ? Perso, quand je fais du GTK, je ne m'en sert point !

    ...

    J'ai essayé la calculette Window, ils limitent l'entrée texte à 32 caractères, c'est ce qu'il y a de plus simple !

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par guimers
    Pourquoi me parles-tu de fgets ? Perso, quand je fais du GTK, je ne m'en sert point !
    OK, j'étais un peu à cheval sur 2 threads... Désolé.

    Mais le principe est là, il faut contrôler l'entrée.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Oui, c'est ce que je vais faire, limiter la saisie à 32 caractères, comme ca je fait un tableau fixe !

    Merçi encore !

Discussions similaires

  1. 2003 : conversion de type long >> text
    Par gui-llaume dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/10/2008, 15h17
  2. Problème de conversion d'un type chaîne en type double
    Par Antonin08 dans le forum Windows
    Réponses: 5
    Dernier message: 17/10/2008, 14h17
  3. Conversion de chaîne "" en type Double non valide
    Par vérokit dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/04/2008, 08h14
  4. Réponses: 16
    Dernier message: 06/06/2007, 15h46
  5. [Conversion Types] Comparer des text
    Par pmartin8 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/11/2006, 21h58

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