Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dividieren durch gebrochene Zahlen

  Alt 19. Jun 2007, 03:30
Du willst offenbar auf 2 Stellen nach dem Komma runden, was Geldwerte vermuten lässt. Dafür eignet sich der Typ Currency ganz gut, da er intern auf Ganzzahlen basiert, und somit die bei Gleitkommawerten unvermeidlichen Rundungsfehler umgeht.
Alternativ kannst du auch selber intern immer mit den Werten mal 100 rechnen, und dann mit Ganzzahltypen, und nur für die Ausgabe durch 100 teilen um das Komma zu erhalten (oder gar per Stringoperationen einfügen).
Gleitkomma geht auch, aber rechne nicht damit bei 2.95/1.59 nachher genau 1.85 zurück zu bekommen. Du wirst nämlich bereits bei deinen Eingangszahlen sowas wie 2.9499999994 und 1.5900000000021 im Speicher haben, und etwas wie 1.850000013 als Ergebnis. Das liegt an der prinzipiellen Funktionsweise von Floats, und ist mit trunc(x*100)/100 nicht abstellbar.
Merken wirst du das zwar erst, wenn du ein paar Millionen Mal irgendwelche Rechungen durchgeführt hast, aber ich halte es für wichtig diesen Umstand immer im Hinterkopf zu haben.

Bei Festkommawerten (Anzahl Stellen nach dem Komma fix) lohnt es sich eigentlich immer intern mit skalierten Ganzzahlen zu rechnen. Allein schon, weil Ganzzahlarithmetik schneller von statten geht.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat