Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
Delphi XE4 Ultimate
|
AW: SimpleRoundTo
28. Dez 2012, 20:57
Hallo,
Zitat:
Delphi-Quellcode:
var
a: Extended;
begin
a := 10.175 - 5E-10;
Caption := FloatToStr(SimpleRoundTo(a));
Der Debugger (Delphi 2007/2010) zeigt a=10,175 an, obwohl der Fehler bereits bei 5E-10 liegt, und damit weit oberhalb der eigentlich erreichbaren Genauigkeit von Extended.
Da foppt uns wohl der Debugger (siehe Anhänge).
Delphi-Quellcode:
var
f : Double;
a, b, c : Extended;
begin
a := 0.55;
b := 18.5;
f := IntPower (10, -2);
c := a * b; // 10.175 in den Lokalen Variablen, 10.175 in Überwachte Ausdrücke
c := c / f; // 1017.5 in den Lokalen Variablen, aber 1017.49999999999998 in Überwachte Ausdrücke (und damit wird gerechnet)
c := Trunc (c + 0.5) * f;
end;
Damit: Trunc(1017.99999999999998) = 1017.
Diese Variante
Delphi-Quellcode:
var
f : Double;
a, b, c : Double;
begin
a := 0.55;
b := 18.5;
f := IntPower (10, -2);
c := a * b; // 10.175 in den Lokalen Variablen, 10.1750000000000007 in Überwachte Ausdrücke
c := c / f; // 10.175 in den Lokalen Variablen, 10.175 in Überwachte Ausdrücke
c := Trunc (c + 0.5) * f; // 10.18 in den Lokalen Variablen, aber 10.1799999999999997 in Überwachte Ausdrücke
Caption := FloatToStr (c) // gibt 18,18 aus hier richtet es FloatToStr
end;
Gruß
Volker Zeller
Geändert von Volker Z. (28. Dez 2012 um 21:18 Uhr)
Grund: Fehlerhafte Angabe korrigiert
|
|
Zitat
|