Nachkommastellen als int sichern



  • hm, diesen Umweg wollte ich vermeiden.



  • Ganzzahlenteil abziehen, dass du 0.xxxxx hast und dann z.B. mal 100 nehmen und wieder in int casten. Dann hast du die ersten beiden Nachkommastellen.
    Allerdings ist das hier alles ziemlich sinnfrei. Was machst du, wenn du 0.8753e+34 hast?
    Was bezweckst du?



  • Brauche ich für ein Rechenprogramm. In ein grafisches Gitter kannste Fließkommawerte eingeben, eine Bruchklasse sorgt dann dafür, dass alles mit Brüchen durchgerechnet wird. Bevor das geschehen kann, brauch ich aber Vor- und Nachkommastelle des floats. e-Schreibweise ist verboten, daher hier kein Problem.



  • Wie willst du

    0.1
    0.01
    0.001
    usw.

    unterscheiden?



  • Dann lass doch den Benutzer Brüche eingeben und keine floats. 😕



  • Ist wegen der Hektik nicht immer möglich. Man gibt mal eben 3.0023223 ein (neben 10 weiteren floats) und will, dass das Programm den Rest erledigt, es geht um Benutzerfreundlichkeit. Bastele jetzt doch an einer Lösung mit Hilfe von strings.



  • In diesem Zusammenhang eine Frage:

    double d = -3.000042334535;
    ostringstream s;
    s << d;
    string str = s.str();
    

    str ist hier sehr ungenau: "-3.00004". Wie kann ich die Genauigkeit auf z. B. 12 Nachkommastellen erhöhen?



  • Hallo,

    probiere für das Setzen der Genauigkeit mal folgendes:

    #include <iomanip>
    ...
    double d = -3.000042334535; 
    std::ostringstream s; 
    s << std::setprecision(12) << d; 
    std::string str = s.str(); 
    
    std::cout << str;
    

    Sven



  • Hallo,

    //---snip-------------
    
    double d=1233.5324324;
    std::stringstream s;
    
    s<<setprecision(12)<<d;
    
    //--- snap -----------
    

    edit: zu spät



  • double d = -3.0000042334535; 
    long zaehler = static_cast<int>(d);
    double temp = d - zaehler;
    if (temp < 0)
            temp *= -1;
    ostringstream s; 
    s << setprecision(12) << temp; 
    string str = s.str();
    cout << str << endl;
    

    Wie kann man verhindern, dass die führenden Nullen zu "4.2334535002e-006" umgewandelt werden. Die führenden Nullen sollen schon bestehen bleiben.



  • Ingo schrieb:

    Wie kann man verhindern, dass die führenden Nullen zu "4.2334535002e-006" umgewandelt werden. Die führenden Nullen sollen schon bestehen bleiben.

    Das müsste folgendermaßen gehen:

    s << fixed << setprecision(12) << temp;
    

    Sven


Anmelden zum Antworten