Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
509 Beiträge
 
Delphi 12 Athens
 
#4

AW: Rundungsproblem in Delphi

  Alt 28. Jan 2025, 09:02
Hallo zusammen,

danke fürs Feedback.

Zunächst muss ich sagen, dass mein Problem gelöst zu sein scheint. Ich habe auch in der Funktion die beiden Deklarationen Faktor, Wert: extended; auf Real gesetzt. Hatte den Code hier aus DP kopiert und nur die Eingangsparameter an meine Werte angepasst.
Trotzdem bin ich verwundert, dass sowohl in "Überwachte Ausdrücke" als auch wenn ich mit der Maus auf Wert fahre, genau 184133 angezeigt wird. Also keinerlei Kommastellen. Trotzdem kommt im Integer nach Trunc 184132 an

Entgegen der allgemeinen Vorstellung, dass Trunc wirklich einfach abschneidet, rundet Trunc gegen "0".
Wie oben beschrieben, gibt es bei der Zahl, zumindest wenn ich auf die Anzeige schaue, nichts mehr zu runden. Ich hatte ja zuvor 184132.5 + 0.5 gerechnet. Der Trunc soll also nur noch die Zahl in eine Integer verwandeln. Tut er auch, aber eben 184132, also 1 zu niedrig

Was spricht gegen RoundTo oder SimpleRoundTo?
Dass dort die übergebene 185.1325 auch auf 184.132 abgerundet wird. Wie gesagt tritt das Problem nur auf, wenn ich die Zahl zuvor per TryStrToFloat aus einem String umgewandelt habe.

Und in meinem Code multipliziere ich die Zahl ja sogar noch, sogar die gewünschten Stellen komplett ganze Zahlen sind und addiere dann noch 0.5 dazu. Trotzdem wird zum Schluss wieder abgerundet. Damit ist die Ganz-Zahl ja schon genau das, was ich will.

Gewünscht ist eine kaufmännische Rundung. D.h. 184.1325 ergibt bei 3 Stellen 184.133 und 184.13249999 ergibt 184.132
  Mit Zitat antworten Zitat