Hallo an alle Mathematiker und Delphi-Experten !
Nachdem ich zum ersten Mal die Delphi-Funktion "round" benutzt hatte, stellte ich fest, daß sie falsch arbeitet.
Beispiel: round(1.5) liefert 2, round(2.5) liefert auch 2
Immer wenn der Nachkommaanteil 0.5 und der Vorkommaanteil eine gerade Zahl ist, wird das Ergebnis falsch. Ich schrieb mir daraufhin eine eigene Funktion und mußte jetzt zu meiner großen Überraschung feststellen, daß auch meine eigene Rundungsfunktion nicht richtig arbeitet, möglicherweise aus demselben Grund, aus dem auch Delphi falsch rundet. Wer kann dieses Phänomen erklären ? Ich verwende Delphi 4.
Johann
procedure test;
var x,y :real;
begin
x := 0.285;
y := Rounded(x,2); // Ergebnis: y = 0.28 Falsch !!
x := 0.325;
y := Rounded(x,2); // Ergebnis: y = 0.33 Richtig !!
end;
function Rounded(pReal : real; pNKStellen : integer):real;
var zw1,zw2 : real;
begin
zw1 := power(10,pNKStellen); // Potenz ermitteln !
zw2 := pReal * zw1;
if (frac(zw2) < 0.5) then
result := int(zw2) / zw1
else
result := (int(zw2) + 1) / zw1;
end;
Nachdem ich zum ersten Mal die Delphi-Funktion "round" benutzt hatte, stellte ich fest, daß sie falsch arbeitet.
Beispiel: round(1.5) liefert 2, round(2.5) liefert auch 2
Immer wenn der Nachkommaanteil 0.5 und der Vorkommaanteil eine gerade Zahl ist, wird das Ergebnis falsch. Ich schrieb mir daraufhin eine eigene Funktion und mußte jetzt zu meiner großen Überraschung feststellen, daß auch meine eigene Rundungsfunktion nicht richtig arbeitet, möglicherweise aus demselben Grund, aus dem auch Delphi falsch rundet. Wer kann dieses Phänomen erklären ? Ich verwende Delphi 4.
Johann
procedure test;
var x,y :real;
begin
x := 0.285;
y := Rounded(x,2); // Ergebnis: y = 0.28 Falsch !!
x := 0.325;
y := Rounded(x,2); // Ergebnis: y = 0.33 Richtig !!
end;
function Rounded(pReal : real; pNKStellen : integer):real;
var zw1,zw2 : real;
begin
zw1 := power(10,pNKStellen); // Potenz ermitteln !
zw2 := pReal * zw1;
if (frac(zw2) < 0.5) then
result := int(zw2) / zw1
else
result := (int(zw2) + 1) / zw1;
end;
Comment