Re: Fehler in Berechnung Addition und Multiplikation von Zahlen
- From: Thomas Winkler <nospam@xxxxxxx>
- Date: Fri, 05 Dec 2008 12:35:28 +0100
Hi,
ich benutzer Access 2003 um Reports zu generieren und muss dort natürlich auch mal etwas berechnen. Nur leider macht Access hier etwas nicht richtig.
Beispiel ist folgende Rechnung:
274.8 - (6 * 45.8)
Sollte eigendlich 0 rauskommen. Access gibt mir jedoch folgendes Ergebnis:
2,8421709430404E-14
2,8 * 10^-14 ist doch 0.
Hat jemand eine Ahnung warum das so ist und -- viel wichtiger -- wie ich das beheben kann??
Das ist so, weil man mit einer endlichen Anzahl Bit (sagen wir mal 32, z.B. bei Single) keine unendlich genaue Abbildung einer Zahl darstellen kann. Der unendlich große Wertebereich von +unendlich bis -unendlich wird erstmal durch den Datentyp eingegrenzt (Single: -3,402823E38 bis -1,401298E-45 und 1,401298E-45 bis 3,402823E38) Dieser Wertebereich wird dann in 2^32 diskrete "Punkte" zerlegt, die darstellbar sind.
Hast Du nun eine Zahl, die nicht exakt einen dieser diskreten Punkte trifft, muss sie gerundet werden. Das kann nun dazu führen, dass Deine 45.8 intern als 45.8000000000001 dargestellt werden muss. Durch die Multiplikation versechsfacht sich der Fehler und fällt dann auf.
1. Verwende Double anstatt Single
Das löst das Problem zwar nicht grundsätzlich, aber könnte im Einzelfall helfen.
2. Nachdenken
Wenn eine Ganzahl (0 Nachkommastellen) mit einer Zahl (1 Nachkommastellen) Multipliziert wird, kann das Ergebnis nur 1 Nachkommastellen haben. Also sollte ein
Round(<ErgebnisDeinerRechnung>, 1)
das gewünschte Ergebnis liefern.
Ansonsten sollte als Faustregel für den zweiten Rundungsparameter gelten:
Max(x, 1) * Max(y, 1)
mit
x = Anzahl Nachkommastellen erste Zahl
y = Anzahl Nachkommastellen zweite Zahl
..
HTH
Thomas
--
"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."
.
- References:
- Fehler in Berechnung Addition und Multiplikation von Zahlen
- From: Dennis George
- Fehler in Berechnung Addition und Multiplikation von Zahlen
- Prev by Date: Re: Fehler in Berechnung Addition und Multiplikation von Zahlen
- Next by Date: Eintrag in Kombinationsfeld hinzufügen
- Previous by thread: Re: Fehler in Berechnung Addition und Multiplikation von Zahlen
- Next by thread: RE: Fehler in Berechnung Addition und Multiplikation von Zahlen
- Index(es):
Relevant Pages
|