Announcement

Collapse
No announcement yet.

Problem beim Casten von Double in Float!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem beim Casten von Double in Float!

    Hallo Entwickler!

    Also, ich habe folgendes Problem: Ich habe eine Anwendung die Messdaten aus einem File in ASCII Form einliest und intern in einer Liste abspeichert. Die einzelnen Messwerte werden als String eingelesen und dann mittels "atof" in ein Double konvertiert. Intern werden die Daten allerdings als Float gespeichert um Speicher zu sparen. Beim Konvertieren des Double-Wertes in einen Float-Wert kommt es allerdings zu üngewöhnlichen Rundungen der Werte. Aufgefallen ist mir dies beim Debuggen der Anwendung.

    Mittels der folgenden Befehlsfolge findet die Konvertierung statt:

    <PRE>
    CString str("-467.8");
    float f = (float)(atof((LPCTSTR) str));
    </PRE>

    Beim Konvertierung des Wertes -467.8 in String-Form ergibt sich ein Float-Wert von -467.799. Es handelt sich hier nicht gerade um eine schwerwiegende Abweichnung, allerdings ist dies für den Anwender unschön.

    Ich habe dann versucht das Problem zu umgehen indem ich den Double-Wert zuerst mit 1000.0 multiplizierte (die Kommastelle also 3 Stellen nach recht schieben) und 0.5 zu addieren (Kommastelle runden!). Anschließend den Wert in einen Integer-Wert konvertieren und diesen Integer-Wert nun in einen Float-Wert konvertieren! Diesen Float-Wert nun durch 1000.0 dividieren und es sollte sich der richte Wert ergeben! Ist allerdings nicht so! Es ergab sich der gleiche Rundungsfehler! (*verblüfft*)

    Folgende Codezeilen habe ich für die Konvertierung verwendet:

    <PRE>
    CString str("-467.8");
    double d1 = atof((LPCTSTR) str);
    double d2 = d1 * 1000.0 + 0.5;
    int i1 = (int) d2;
    float f1 = (float) i1;
    float f2 = f1 / 1000.0;
    </PRE>

    Beim Konvertierung des Wertes -467.8 in String-Form ergibt hat sich ebenfalls ein Float-Wert von -467.799 ergeben.

    Wenn mir jemand sagen könnte, warum sich diese Abweichnung ergibt bzw. eine Lösung zu den Problem bieten könnte, wäre ich sehr dankbar.

    MFG Daniel
    Zuletzt editiert von Daniel Strigl; 02.03.2007, 07:34.

  • #2
    467,799 mal 1000 ist 467799. Plus 0,5 ergibt 467799,5. In Integer umgewandelt 467799 und durch 1000 geteilt wieder 467,799. Wenn Du statt 1000 nur 100 genommen hättest, wäre alles Ok :-)

    Gruß - Günthe
    Günther

    Comment


    • #3
      Danke! Aber das Problem hat sich erledigt!

      Es war nur ein Fehler bei der Ausgabe

      Comment

      Working...
      X