Konvertierung AnsiString -> double mit def. Anzahl Nachkommastellen



  • Hallo,

    ich konvertiere einen Text nach double:

    double myDouble = Edit1->Text.ToDouble();
    

    Jetzt möchte ich aber eine Genauigkeit von 2 Nachkommastellen erhalten. Wie kriege ich das hin???

    Danke
    Torsten



  • Was meinst du mit Genauigkeit? Die in einer Zeichenkette in dezimaldarstellung vorliegende Zahl an der dritten Nachkommastelle abschneiden? Runden? Was ist mit Zahlen die als Double nicht exakt dargestellt werden können?



  • Anders gesagt. Du kannst die Genauigkeit einer double Zahl nicht beeinflussen. Das ist festgelegt.
    siehe: http://de.wikipedia.org/wiki/Doppelte_Genauigkeit
    Du kannst lediglich beeinflussen wie der String aussieht den du in double konvertieren willst. Natürlich kannst du die double Zahl runden. Das verändert aber nicht ihre Genauigkeit.



  • Hallo,

    ich habe das Problem, dass der String "18,4" nach der Konvertierung nach double den Wert "18.3999934264757......" hat und dieser Wert auf einem Protokoll erscheint.
    Den double-Wert benötige ich für weitere Berechnungen. Klar, ich könnte diesen double-Wert vor der Ausgabe im Protokoll wieder nach String konvertieren und dann auf die jeweiligen Stellen trimmen. Aber diesen Schritt wollte ich eigentlich umgehen.

    Gruß
    Torsten



  • Wie machst du denn diese Ausgabe. Falls du streams verwendest kannst du mit setprecision aus der iomanip die Darstellung festlegen.
    Das die 18,4 nicht bleibt ist normal. Die Zahlen werden ja zur Basis 2 gespeichert. Damit ist 18,4 nicht exakt darstellbar. Genaueres findest du im von mir genannten Link.
    Hier ist da nochmal etwas ausführlicher erklärt.
    http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html



  • Ich habe es jetzt so gelöst, dass die Eingabe des Textes (18,4) in einer weiteren Variable abgelegt wird. Diese wird dann bei der Erstellung des Protokolls angezogen und ausgedruckt. Somit ist die ganze hin-und-her-Konvertierung (fast) überflüssig. 😉

    Vielen Dank
    Torsten



  • torsten_156 schrieb:

    Hallo,

    ich habe das Problem, dass der String "18,4" nach der Konvertierung nach double den Wert "18.3999934264757......" hat und dieser Wert auf einem Protokoll erscheint.
    Den double-Wert benötige ich für weitere Berechnungen. Klar, ich könnte diesen double-Wert vor der Ausgabe im Protokoll wieder nach String konvertieren und dann auf die jeweiligen Stellen trimmen. Aber diesen Schritt wollte ich eigentlich umgehen.

    Gruß
    Torsten

    Da kann was nicht stimmen!!!

    Wenn ich das mit double mache, kommt nix mit nur 4x9 nach dem Komma raus.

    Du nimmst doch eher float - da ist die Genauigkeit so gering!

    Gruss
    Frank


Log in to reply