Signaler

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

Posez votre question bobi14 68Messages postés vendredi 23 février 2007Date d'inscription 4 novembre 2007 Dernière intervention - Dernière réponse le 1 sept. 2017 à 15:34 par codeurfou
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.
Utile
+20
plus moins
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é ?  
Utile
+1
plus moins
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 68Messages 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;
Utile
+0
plus moins
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.
Utile
+0
plus moins
Merci bien pour vos réponses et surtout "mamiemando" pour ton code super bien détailé...

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !