[c++] Cast double -> string

Résolu
bobi14 Messages postés 67 Statut Membre -  
 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.

4 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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
    1. codeurfou
       
      Merci
      0
  2. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    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
    1. bobi14 Messages postés 67 Statut Membre 8
       
      Merci pour ta réponse aussi rapide.

      Est-ce que ça marche si je fais:

      string variable=(string)variable_en_double;
      0
  3. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    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
  4. bobi14 Messages postés 67 Statut Membre 8
     
    Merci bien pour vos réponses et surtout "mamiemando" pour ton code super bien détailé...
    0