Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Dsum rechnet falsch

Begonnen von ReneB, August 06, 2021, 12:21:57

⏪ vorheriges - nächstes ⏩

ReneB

Hallo Leute,

ich bin auf ein Problem gestossen, welches sich mir nicht so recht erklärt. Dieses Problem tritt übrigens nur bei Zahlen mit 0,0... auf. Ich habe einen Vergleichswert 0,075 in einer Tabelle.

Über eine Eingabemaske (Formular) werdem Werte eingetragen und in einer anderen Tabelle gespeichert.
Bei jeder Buchung vergleiche ich beide Werte mit DSum. Sobald die eingetragnenen Werte den Vergleichswert von 0,075 übersteigen, geht eine Messagebox auf und informiert. Das funktioniert immer reibungslos ausser bei 0,0.. Werten, denn hier springt die Messagebox bereits an, obwohl der Vergleichswert noch nicht überschritten wurde. Zwei Buchungen zu je 0,025 kann ich machen, doch sobald ich ein drittes mal versuche 0,025 zu buchen schlägt die Messagebox an. Ich habe die Berechnung mal ausgeschalten und die drei Werte über Tabellensumme überprüft. Es sind exakt 0,075.

Kann mir jemand erklären, wo das Problem liegt?

Danke vorab

Rene


MzKlMu

Hallo,
typisches Problem mit einer Fließkommaberechnung.
ZitatEs sind exakt 0,075.
Das kann bei einer Fließkommadarstellung bezweifelt werden. Wenn Du 0,075 siehst, kann da in Wirklichkeit durchaus 0,075000004 drin stehen. Das wäre dann größer als 0,075. Da wird nichts falsch gerechnet.
Welche Datentypen hast Du denn für die Felder in der Tabelle eingestellt ?
Sind Formate eingestellt (in der Tabelle und/oder im Formular) ?
Gruß Klaus

ReneB

Hallo

nun der Datentyp in den Tabellen ist jeweils "double" Dezimalstellen automatisch und im Formular steht unter Format "allgemeine Zahl" mit drei Dezimalstellen. Muss ich hier was ändern?
Die Zahlen sollten passen, denn die gebe ich ja händisch ein.

Danke imn Voraus.

Rene

DF6GL

Hallo,

auch bei händischer Eingabe tritt der von Klaus beschriebene Effekt (Rundungen) bei Datentyp Double (Gleitkommazahlen) auf.

Ändere den Datentyp in "Währung", so dass sich eine Festkommazahl mit 4 Stellen hinter dem Komma ergibt.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ReneB

Hallo,

danke für den Tip. Allerdings verstehe ich nicht warum Währung. Es handelt sich um eine einfach Zahl. Würde es reichen, wenn ich das Format auf Festkommazahl ändere in Tabellen und Formular?

Danke

Rene

Josef P.

Hallo!

Der Währung-Datentyp ist keine Gleitkommazahl. Das ist im Prinzip eine Ganz-Zahl bei der gespeichert wird, an welcher Stelle das Dezimaltrennzeichen sein soll.
Gleiches gilt für den Datentyp Dezimal, welchen ich statt Währung verwenden würde, um die Anzahl der Dezimalstellen zu wählen.

zu "Format auf Festkommazahl":
Das Format ist nur für die Anzeige des Wertes zuständig und nicht für dessen Inhalt.

Viele Grüße
Josef

DF6GL

Hallo,

nein...

Formate sind nur für die (meistens) visuelle Darstellung da und haben mit Datentypen nichts zu tun.

Datentypen definieren die interne Speicherungs-Methode von Zeichen, bzw. numerischen Daten und anderen Daten (--> Blop, OLE, Binärer Stream)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

#7
Hallo,
der Datentyp Double (Gleitkommazahl) ist für derartige Berechnungen völlig ungeeignet. Einer angezeigten Fließkommazahl mit Kommastellen kann man niemals trauen, wenn mit Format auch noch Kommastellen eingestellt sind erst recht nicht.
ZitatWürde es reichen, wenn ich das Format auf Festkommazahl ändere
Nein, (wie bereits gesagt). Ein Format änderst nichts an dem Wert der in der Tabelle gespeichert ist. Formateinstellungen haben nur Einfluss auf das was man sieht, aber nicht auf die eigentlichen Inhalte.
Die einfachste Version ist Währung zu verwenden, welche ja wie gesagt im Hintergrund eine Ganzzahl ist. Das Währungszeichen kann über die Formateinstellung ausgeblendet werden. Oder halt dezimal.

Zur Gleit/Fließkommaproblematik findest Du jede Menge Infos bei Google. Das Problem hat jeder Taschenrechner und auch Excel. Nur da wird es vertuscht.
Gruß Klaus

ReneB

Hallo Leute,

Ok dann stelle ich die beiden Tabellen auf dezimal um. Formular scheint also davon nicht betroffen zu sein.

Danke schon mal.

Rene

ReneB

Guten Morgen,

habe alle Tabellen auf dezimal umgestellt und siehe da es scheint zu funktionieren.

Danke an Alle.

Schöne Woche Euch

Rene