lange Double-Zahl in String konvertieren



  • Hallo Zusammen.

    Ich möchte eine Double-Zahl mit vielen (ca.12 oder mehr) Nachkommastellen in einen String vom Typ Char[50] umwandeln. Nun haben ich hier schon den 2. und 3. Tipp ausprobiert. sprintf schneidet rundet mir meine Zahl auf 6 Nachkommastellen, und ostrstream erstellt mir keinen Char-Datentyp.

    Weiß jemand Rat?

    Grüße und vielen Dank,
    Dirk



  • Morgen!

    "...und ostrstream erstellt mir keinen Char-Datentyp"

    Aber du kommst vom std::string relativ leicht zu einem char-Array:

    Bsp.:
    -----
    #include <iostream.h>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      double zahl=1.123456789101;
    
      ostringstream stream;
      stream<<zahl;
    
      string myString(stream.str());
    
      const char *array=myString.c_str();
      cout<<array<<endl;
      delete []array;
    
      return(0);
    }
    

    Grüße,
    TS++

    [ Dieser Beitrag wurde am 03.07.2003 um 08:38 Uhr von TS++ editiert. ]



  • Hallo TS++,

    danke für die Antwort. Eine Frage habe ich aber noch: Liegt meine Char-Zahl jetzt in einer Variable? Für mich sieht es so aus, als ob die in der Zeile "cout<<array<<endl;" lediglich ausgegeben wird. Mein Versuch statt dem cout eine Variable setzen schlug leider fehl. Wahrscheinlich habe ich den falschen Datentyp genommen.
    Wäre nett, wenn du mir da nochmal einen Tipp geben könntest.

    Edit:
    Ich habe gerade mit der ostringstream-Funktion noch etwas rumgespielt. Mir viel dabei auf, dass ich einfach die Variable array als Char behandeln kann. Allerdings gab mir meine Funktion (eine DLL die ich aus Excel-VBA ansteuere) immer noch die falschen Werte aus. Als ich mir einmal die länge des Streams über 'int x = myString.length();' angeschaut habe, lag der Wert für x bei 10. Die Zahl 'zahl' ist aber länger. Woran kann das liegen??

    Ach ja, ich arbeite mit VC++. Hat hoffentlich keinen Einfluss...

    Grüße,
    Dirk

    [ Dieser Beitrag wurde am 03.07.2003 um 15:52 Uhr von Dirk99 editiert. ]



  • Hallo Zusammen!

    Vielen Dank, dass ihr Euch Eure Köpfe zerbrochen habe. Bei weiterem googlen im Netz bin ich auf eine derat einfach Lösung gestoßen, das gibts gar nicht. Die Zeile

    _gcvt(DoubleZahl, 15, DoubleText);
    

    macht genau das was ich möchte.

    So kurz und doch so stark.

    Grüße,
    Dirk

    [ Dieser Beitrag wurde am 03.07.2003 um 18:13 Uhr von Dirk99 editiert. ]


Anmelden zum Antworten