double (64bit) aus string lesen



  • Hallo.

    Ich will aus einem String einen double-Wert (64 bit) auslesen, also z.B.:

    double fValue = 0.;
    string xWert_Gultig = "1000000 ... 0000" ;  // 300 Nullen
    string xWert_Nicht_Gultig = "1000000 ... 0000" ;  // 400 Nullen
    

    (Ich weiss, das sind ganzzahlige Werte.)

    Mit sscanf kann ich aber nur float (32 bit) auslesen. Dabei ergibt der Versuch einen grösseren Wert zu lesen einen Fehler.

    if( sscanf( xWert_Gultig .c_str(), "%f", &fValue ) == 1 )
    

    usw.

    Wie kann ich solche Werte lesen? Und zwar so, dass xWert_Gultig in double gelesen wird, xWert_Nicht_Gultig ( ist zu gross für double) aber nicht?

    Danke im voraus.



  • probiers mal mit

    #include <sstream>
    // ...
    std::stringstream ss(dein_string);
    double d;
    if(!(ss >> d)) {
        // fehler
    }
    


  • zähl doch einfach die anzahl an Stellen in dem String, wenn es 300 sind,dann wandel das ganze in double um und wenn es mehr sind, dann eben nicht.

    Wenn ich deine Frage richtig verstanden habe 🙂



  • Danke Xantus, für xWert_gultig funktioniert es jetzt.

    Bei xWert_Nicht_Gultig bekomme ich keinen Fehler, aber fValue ist 1.#INF00.

    Habe dann versucht:

    try
    {
       fValue++ ;
    }  
    catch(...)
    {
       //Fehler
    }
    

    Um damit den Fehler abzufangen, aber ohne Ergebnis. Anscheinend wird fValue als gültiger wert akzeptiert.
    Was habe ich davon zu halten?



  • Ich kann dir leider nicht sagen, ob der Standard eine Funktion zur Überprüfung von Infinity (ebenso wie NaN) bietet, ich denke aber nicht.
    Vielleicht habe ja manche Compiler in ihrer <cmath> eine isinf() oder isnan() Funktion.


  • Administrator

    #include <limits>
    
    // ... irgendwo ...
    
    double value = /* ... */; // was auch immer.
    
    if(std::numeric_limits<double>::infinity() == value)
    {
      // Fehler.
    }
    

    Grüssli



  • Vielen Dank für die Aufklärung, Dravere 🙂


Anmelden zum Antworten