Am 01.02.2010 um 20:19 schrieb Andy Fuchs: > Das ist von Fall zu Fall unterschiedlich. Letztlich kommt's auf die > benötigte Genauigkeit an. > > Das Problem ist, dass Fliesskommazahlen NIEMALS *genau* sind. Sie enthalten > immer eine gewisse 'Unschärfe' und zwar spätestens, wenn eine Division > durchgeführt wird (die ja binär ist und daher mit einer endlichen > Genauigkeit erfolgt). Daher ist beispielsweise 199.0/100.0 *ungefähr* 19,9. > Da der Wert (für den Computer) aber binär ausgedrückt wird, ist's halt nicht > *genau* 19,9. Das läppert sich u.U. im Laufe der Operationen zusammen. > > Solange Du Dich - wie in dem Beispiel - in einem bestimmbaren Wertebereich > aufhältst, kannst Du die Unschärfen vermeiden, wenn Du den kleinsten > möglichen Wert als ganzzahliges Minimum annimmst (daraus ergibt sich dann > automatisch der Multiplikator). > Das Ganze ist übrigens ein typisches Problem, wenn Du z.B. Lohnsteuerdaten > mit unterschiedlichen Programmen berechnest. Da kann's schnell mal > passieren, dass die Endbeträge um einige Cents auseinanderliegen. Brichst Du > das Ganze auf Cents runter, vermeidest Du das grundsätzliche Problem, dass > Deine Zahlen bereits unscharf gespeichert sind und ebenso verarbeitet > werden. D.h. die Ergebnisse sind deutlich konsistenter... Den > Fliesskomma-Wert verwendet man dann quasi nur bei der letztlichen Ausgabe > (z.B. mit format(...)).
Die Problematik von Fließkommazahlen ist mir bekannt, aber es gibt in Rb noch einen weiteren Datentyp (den ich bisher aber nicht genutzt habe): Currency. Der Name des Datentyps lässt ja darauf schließen, dass er speziell für Geldbeträge gedacht ist. Hier, was die LangRef über den Datentyp sagt: This is a 64-bit fixed-point number format that holds 15 digits to the left of the decimal point and 4 digits to the right. It is compatible with the Currency data type that is offered in some versions of Visual Basic. Ob vier Nachkommastellen für ein Finanzprogramm ausreichend sind weiß ich nicht, ist hier aber auch nicht meine Frage. Verstehe ich es richtig, dass dieser Datentyp die "Unschärfe" von Fließkommazahlen (zumindest bis zur vierten Stelle hinter dem Komma) vermeidet? Gruß Christian ---------------------------------------- Christian Dorn realbasic {a} online.de REALbasic 2009r5 Studio iMac 3.06 GHz Intel Core 2 Duo, 4 GB RAM PowerMac G5 2x2GHz, 1.5 GB RAM Mac OS X 10.6.2 ----------------------------------------