Seite 1 von 1

Delphi 2005 Arbeiten mit Kommazahlen

Verfasst: 01.11.2020 10:27:18
von Reinhard Raschke
Hallo Zusianer & Delphianer,

warum liefert Delphi mit nachfolgendem Code als Ergebnis 0.0999999046325684 und nicht 0.1 wie jeder normale 1€-Taschenrechner?
Die Variable c wird später noch für if-Routinen verwendet, da hilft ein Schönformatieren mit FloatToStrF wenig.
Für einen Gedankenschubser wäre ich sehr dankbar!

..

procedure TForm1.Button53Click(Sender: TObject);
var
i: Integer;
Durchgang: Integer;
a: Single;
b: Single;
c: Single;

begin
a := 5.1;
b := 5;
c := a - b;
showmessage(FloatToStr(c));
..
end;

Gruß

Reinhard

Re: Delphi 2005 Arbeiten mit Kommazahlen

Verfasst: 01.11.2020 10:45:40
von Johannes
https://de.wikipedia.org/wiki/Gleitkomm ... arithmetik" target="_blank

„Gleitkommazahlen warten besonders für den mathematischen Laien mit einigen Überraschungen auf, die auch oft das Ergebnis von Taschenrechner- und Computerrechnungen beeinflussen. Am wichtigsten sind außer Kraft gesetzte geläufige mathematische Rechenregeln. Wer intensiv mit einem Rechenhilfsmittel arbeitet, muss diese Eigenschaften kennen. Sie gehen auf die begrenzte Genauigkeit zurück, mit der Mantisse und Exponent gespeichert werden.“

Double statt Single zu verwenden wäre ein erster Schritt zu mehr Genauigkeit.

Re: Delphi 2005 Arbeiten mit Kommazahlen

Verfasst: 01.11.2020 10:54:03
von Jens Haupert
Johannes hat geschrieben:Double statt Single zu verwenden wäre ein erster Schritt zu mehr Genauigkeit.
Hallo,

bei dotnet wird dann das Ergebnis zu 0.099999999999999645. Das ist näher dran, hilft einem aber auch nicht weiter. :D

@Reinhard: Wenn man Fließkommazahlen ausgeben oder testen will, sollte man diese immer auf die gewünschte Nachkommastelle runden. Und in deinem Fall würde man noch besser den Abstand prüfen. Also z.B. if (Math.Abs(0.1 - c) < 0.1) oder so.

Grüße
Jens

Re: Delphi 2005 Arbeiten mit Kommazahlen

Verfasst: 01.11.2020 11:12:11
von Michael_Poschmann
Jens, alles eine Frage der inschinörmäßigen Abschätzung. Wie war das noch? "Pi ist gleich Drei, für genügend kleine Pi und große Drei."

Grüße aus dem Ungefähren
Michael

Re: Delphi 2005 Arbeiten mit Kommazahlen

Verfasst: 01.11.2020 11:46:32
von Reinhard Raschke
@ all : Danke für eure Beiträge

Da es sich später bei den Zahlen um Zusi-Koordinaten handelt, möchte ich vom Runden absehen. Ich will die Daten nicht unnötig verfälschen (Wenn auch nur sehr geringfügig).

Ich werde versuchen das Problem damit zu lösen, die Kommazahl (liegt als String vor) in eine Integer-Form zu zwingen, die ich dann ordentlich bearbeiten kann.

Gruß

Reinhard