Es könnte natürlich auch sein, daß bei Dir die Rundungsart des Prozessors verstellt/falsch eingestellt ist.
Du meintest TFPURoundingMode in AMath?
Da kommt bei mir "rmNearest" zurück
Ich bin meinen Code und v.a. meine Logging-Ausgaben nochmal durchgegangen - da war so einiges falsch.
Durch die Ausgaben z.B. mit %f oder %.4f kamen einige bereits gerundete Ergebnisse zurück.
Zudem war an manchen Stellen meine Ausgabe nicht synchron mit der tatsächlichen Berechnung (z.B. * 10 im Wert, im Text aber ohne * 10).
Ich habe das jetzt alles mal korrigiert - der Wert, um den es dann ging war tatsächlich 22.648888888888 -> auf zwei Nachkommastellen dann ein Frac von 0.88888889 * 10 = 8.88888889 und hier ist Int() dann tatsächlich 8.00000
Ich habe allerdings immer noch den Fall, dass (angezeigt) aus Frac(9.0000000000) (1.00000000) wird - aber nur, wenn ich es innerhalb der Berechnung mit einer Variablen ausgebe.
Wenn ich von Hand (als fest kodiert), den Wert 9.00000000 an die Frac-Routinen gebe, kommt korrekt 0.0 raus.
Trotz allem sehr seltsam (0.00000001 oder so als Ergebnis würde ich ja noch verstehen, aber 1.00000000?)
Versuche mal das obige Beispiel ganz ohne Math.pas mit diesem Code:
Der Code funktioniert perfekt - auch in den Fällen, in denen Math.SimpleRoundTo das falsche Ergebnis liefert!
Bei mir kommen unter Delphi 7 jedenfalls die erwarteten Ergebnisse heraus.
Wie oben gesagt, das hängt tatsächlich von den berechneten Werten ab - mit manuellen, hart kodierten Werten kommen bei mir (meistens
) auch die erwarteten Ergebnisse zurück.
Wie dem auch sei - ich bin aktuell ganz zufrieden mit meinen Lösungen und Danke Euch allen für Eure Hilfestellungen!