[c++] Cast double -> string [Résolu/Fermé]

bobi14 68 Messages postés vendredi 23 février 2007Date d'inscription 4 novembre 2007 Dernière intervention - 25 avril 2007 à 09:28 - Dernière réponse :  codeurfou
- 1 sept. 2017 à 15:34
Bonjour,

Je souhaiterai savoir s'il est possible de caster un double en string.
Si oui est-ce que les chiffres aprés la virgule seront pris en compte?


Merci d'avance pour vos réponses.
Afficher la suite 
68Messages postés vendredi 23 février 2007Date d'inscription 4 novembre 2007 Dernière intervention

6 réponses

mamiemando 28084 Messages postés jeudi 12 mai 2005Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention - Modifié par mamiemando le 1/09/2017 à 18:56
+20
Utile
1
La solution C++ c'est de passer par un ostringstream.

#include <iostream>
#include <sstream>

int main(){
    double x = 1.23456789;
    std::string s;
    {
        std::ostringstream oss;
        oss << x;
        s = oss.str();
    }
    std::cout << "x = " << x << " s = " << s << std::endl;
    return 0;
}


Ce qui donne :

(mando@aldur) (~) $ g++ -W -Wall plop.cpp
(mando@aldur) (~) $ ./a.out
x = 1.23457 s = 1.23457


Tu peux éventuellement régler le nombre de décimales qui vont apparaître à priori le nombre de décimales est réglable sur oss
http://www.cplusplus.com/reference/iostream/ios_base/precision.html

Sinon il reste les traditionnels sprintf du C, qui passent par un buffer.

#include <iostream>
extern "C"{
    #include <stdio.h>
}

int main(){
    double x = 1.23456789;
    std::string s;
    char buffer[100];
    sprintf(buffer,"%.9lf",x);
    s = buffer;
    std::cout << "x = " << x << " s = " << s << std::endl;
    return 0;
}


donne à l'éxecution :

(mando@aldur) (~) $ g++ -W -Wall plop.cpp
(mando@aldur) (~) $ ./a.out
x = 1.23457 s = 1.234567890


La vraie question, c'est as-tu besoin de passer par un buffer ou un
std::ostringstream
, pour ne pas directement régler la précision de ton
std::ostream
(ce qui inclue en particulier
std::cout
,
std::cerr
, les
std::ofstream
et les
std::ostringstream
).

Bonne chance
Cette réponse vous a-t-elle aidé ?  
Stupeflip 392 Messages postés jeudi 8 février 2007Date d'inscription 4 décembre 2007 Dernière intervention - 25 avril 2007 à 09:35
+1
Utile
1
Salut,

Oui c'est tout à fait possible avec par exemple la fonction sprintf (oui j'adore cette fonction).

sprintf(ton_string,"%f",ton_double);

bobi14 68 Messages postés vendredi 23 février 2007Date d'inscription 4 novembre 2007 Dernière intervention - 25 avril 2007 à 09:43
Merci pour ta réponse aussi rapide.

Est-ce que ça marche si je fais:

string variable=(string)variable_en_double;
Stupeflip 392 Messages postés jeudi 8 février 2007Date d'inscription 4 décembre 2007 Dernière intervention - 25 avril 2007 à 10:33
0
Utile
Et bah mamiemando t'es un fou du C++ toi ^^

Sinon
string variable=(string)variable_en_double;
ne devrait pas marcher je pense pas qu'on puisse caster un double en char* par exemple.
bobi14 68 Messages postés vendredi 23 février 2007Date d'inscription 4 novembre 2007 Dernière intervention - 25 avril 2007 à 10:43
0
Utile
Merci bien pour vos réponses et surtout "mamiemando" pour ton code super bien détailé...