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
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
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.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
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 ?
Qu'entends-tu exactement par là, car Médinoc t'a donné la bonne solutione voudrais transfoirmer cette variable de type double en char ou string. Quelle serrait la bonne façon de faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf(buf, "%ld", var_double);
"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
En effet, voir ce lien:sprintf() si rien d'autre n'est disponible
http://c.developpez.com/faq/c/?page=...RINGS_strtonum
Hello,
Envoyé par Trap D
C'est un double, pas un long
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf(buf, "%lf", var_double);![]()
A+
Tout à fait Foobar1329![]()
"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
Ok après test je vais peut être y arriver.
Je vous remercie beaucoup pour votre aide.
Bonne journée![]()
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 !
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.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Il faudrait faire comme ca ?
Ca marche pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("Il faut : %ld caracteres\n", sprintf(NULL, "%d", double1 + double2 ));,je vais me pencher sur tes autres propositions !
C'est snprintf(), pas sprintf()... et il faut un compilateur (et une bibliothèque) C99.Envoyé par guimers
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...
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]
"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
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.
Avec fgets(), pas de risque de plantage. Au pire il y a troncage, et la fonction clean()Envoyé par guimers
http://www.developpez.net/forums/sho...62&postcount=5
peut être modifiée pour le signaler dans son code retour.
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...Quel est le nombre Max de chiffres avant et après la virgule ?
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.
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 !
OK, j'étais un peu à cheval sur 2 threads... Désolé.Envoyé par guimers
Mais le principe est là, il faut contrôler l'entrée.
Oui, c'est ce que je vais faire, limiter la saisie à 32 caractères, comme ca je fait un tableau fixe !
Merçi encore !
Partager