Zitat von
taaktaak:
label1.caption:=floattostr(3.7/3.7); // label zeigt 1
Ich gehe stark davon aus, dass der Compiler die Literale bereits zur Compiletime optimiert, und zusätzlich rechnet der TE noch zuvor mit seinen Werten herum. Er hat ja nicht 3.7 als Literal im Code, und auch keine Variablen denen er beiden je direkt diesen Wert zuweist, sondern es ist ein Ergebnis einer Rechnung, und diese kann durch die Funktionsweise von Floats bereits ungenau sein, und dies zieht sich dann eben durch.
Das ist einfach nur wieder ein Fall von "kenne deine Typen, und wisse um ihre Schwächen"
. Wenn es auf hundertprozentige Genauigkeit ankommt, kommst du um Ganzzahltypen nicht herum. Man büßt dafür allerdings die maximale Anzahl der Nachkommastellen ein, und handelt sich sobald mehr als nur Addieren/Subtrahieren vor kommt erneut Fehler durch die nötige Rundung ein.
Manchmal ist es aber auch schon genug, die Rechnungen umzustellen, anders zu klammern, und generell Operatoren zu minimieren. Ob und wo das reicht ist aber von Fall zu Fall sehr unterschiedlich.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)