[c++] Cast double -> string

Résolu/Fermé
bobi14 Messages postés 67 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 4 novembre 2007 - 25 avril 2007 à 09:28
 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.
A voir également:

4 réponses

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié le 1 sept. 2017 à 18:56
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/ios/ios_base/precision/

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
20
Merci
0
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
25 avril 2007 à 09:35
Salut,

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

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

1
bobi14 Messages postés 67 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 4 novembre 2007 8
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;
0
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
25 avril 2007 à 10:33
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.
0
bobi14 Messages postés 67 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 4 novembre 2007 8
25 avril 2007 à 10:43
Merci bien pour vos réponses et surtout "mamiemando" pour ton code super bien détailé...
0