ich bin gerade dabei ein Rechnungsprogramm zu schreiben. Es generiert also Rechnungen. Dabei werden Menge und Einzelpreis miteinander Mal genommen. Beide Werte haben maximal 2 Nachkommastellen. Das Ergebnis soll natürlich auf ganze Cent gerundet werden und mit diesem gerundeten Wert soll weiter gerechnet werden. (Auch wenn das zu Rundungsfehlern führt, so denkt halt der Mensch). Dieses Vorhaben erwies sich als ziemlich schwierig. Weder ein Ruond noch ein RoundTo noch der Weg über einen String mit FloatToStrF noch ein +0.005 mit trunc führte zum Erfolg:
Code: Alles auswählen
var a,b,c,d : double;
a:=12.45;
b:=0.03;
c:=a*b;
d:=roundto(c,2); //Führt zu d=3.73 statt 3.74
d:=trunc((d+0.005)*100))/100 //Führt ebenfalls dazu, dass d=3.73 statt 3.74 ist.
Code: Alles auswählen
var a,b,c,d,e,g : double;
var f : integer;
a:=12.45;
b:=0.03;
c:=a*b;
d:=roundto(c,2); //Führt zu d=3.73 statt 3.74
e:=(d+0.005)*10000; //sic(!)
f:=trunc(e);
e:=f/100;
f:=trunc(e);
g:=f/100; //jetzt steht in g=3,74. Auch alle anderen Zahlen werden korrekt gerundet