PDA

Vollständige Version anzeigen : Rundungsdifferenzen Prozentrechnung


normadrei
26.05.2012, 17:55
Hallo,
leider habe ich trotz eifrigem Suchen keine Lösung für mein Problem gefunden. Ich muss Verzugszinsen berechnen und das über viele Jahre hinweg. Leider stimmen meine Ergebnisse in Access nicht mit dem Internetrechner und meinem Taschenrechner überein. Ich weiß, dass es am Felddatentyp liegen muss.

Eingestellt für den Zinssatz habe ich: Zahl, Dezimal, Genauigkeit 18, Dezimalstellen 2, Dezimalstellenanzeige 2.

Meine Formel: curZins = curBetrag / 100 * dblSatz

Wie bekomme ich die richtige Genauigkeit hin?
Danke und Gruß normadrei

Zahlen Internet http://basiszinssatz.info Zinsrechner Verzugszinsen

11.03.2009 - 30.06.2009: 112 6.62 % 203,1342 €
01.07.2009 - 31.12.2009: 184 5.12 % 258,1041 €
01.01.2010 - 30.06.2010: 181 5.12 % 253,8959 €
01.07.2010 - 31.12.2010: 184 5.12 % 258,1041 €
01.01.2011 - 30.06.2011: 181 5.12 % 253,8959 €
01.07.2011 - 31.12.2011: 184 5.37 % 270,7068 €
01.01.2012 - 26.05.2012: 147 5.12 % 205,6393 €
Summe 11.703,4804

Meine Zahlen: (1.Zahl sind Tage)

112 6,62 203,6923
184 5,12 258,8132
181 5,12 254,5934
184 5,12 258,8132
181 5,12 254,5934
184 5,37 271,4505
146 5,12 204,8
Summe 11.706,76 €

ebs17
26.05.2012, 18:23
Meine Formel: curZins = curBetrag / 100 * dblSatz
Wie berücksichtigst Du damit Tage?

Anders ausgedrückt: Vor dem Runden kommt das Rechnen.

normadrei
26.05.2012, 18:44
Hallo Eberhard,

Tage berücksichtige ich so:

1. Schritt - Anzahl Tage des betreffenden Jahres bestimmen (365/366)
2. Zinsen für 1 ganzes Jahr berechnen
3. durch Anzahl Tage aus 1. teilen
4. wie viele Tage in dem betreffenden Zeitraum
mit Anz. Tage aus 4 multiplizieren

Die Anzahl Tage stimmen ja auch überein. Nur halt die Zinsen nicht.

Gruß normadrei

ebs17
26.05.2012, 18:57
2. Zinsen für 1 ganzes Jahr berechnen
3. durch Anzahl Tage aus 1. teilen
Bist Du sicher, dass das zulässig ist?

Mathematisch würde ich statt einer linearen Rechnung eine Zinseszinsrechnung erwarten, die dann etwa so geht:
AufgelaufenerZins = Bezugsbetrag * (1 + Tageszinssatz / 100) ^ AnzahlTage
(Weil viele den Zinseszinseffekt nicht verstehen, werden sie mit Guthaben nicht reich und bei Schulden fahren sie immer tiefer in den Keller.)

normadrei
26.05.2012, 19:11
Bei Verzugszinsen dürfen keine Zinseszinsen berechnet werden. Daher habe ich die auch nicht angesetzt.

Die eigentlichen Zinsen sind tagesgenau zu berechen, nach dem jeweiligen Basiszins - gibt es bei der Bundesbank.

Mein Problem ist nur die korrekte Prozentrechnung. Da die Zahlen von dem Internetrechner exakt mit denen meines Taschenrechners übereinstimmen, gehe ich mal davon aus, dass die richtig sind. Daher muss meine Berechnung in Access falsch sein. In dem Beispiel sind es nur 4 Jahre. Ich brauche aber bis zu 30 Jahre und da wird es dann doch sehr ungenau.

Gruß normadrei

ebs17
26.05.2012, 19:35
Wenn ich linear rechne ...
6,62 * 112 / 365
... komme ich auf die gewünschte Ziffernfolge (Kommaverschiebung mal unberücksichtigt).

normadrei
26.05.2012, 20:15
Hallo Eberhard,

in der Zwischenzeit bin ich so verwirrt, dass ich erst einmal aufhöre, das Thema als erledigt setze und morgen weiter mache.

Zum weiteren Testen hatte ich mir eine Tabelle angelegt mit 4 Feldern, je mit den Felddatentypen Single, Double, Decimal und Long. In alle habe ich den gleichen Zinssatz eingegeben 5,12. Die Anzahl Tage (181) und den Betrag (10.000) habe ich über Formularfelder eingegeben. Die Zinszätze wie im Original über DAO.rst abgefragt und dann in die gleiche Formel wie im Original eingefügt. Ergebnis: Bis auf Long alle gleich und alle richtig.

Jetzt verstehe ich die Welt nicht mehr. Im Original passiert nichts anderes - aber das Ergebnis ist falsch! Ich mache morgen weiter.

Gruß normadrei

ebs17
26.05.2012, 20:25
Long Integer und 5,12 sind eine sehr unpassende Kombination.
Vor dem Rechnen kommt der gesunde Menschenverstand, und eine Ganzzahl kann mit Dezimalstellen nichts anfangen.

Beaker s.a.
26.05.2012, 20:39
Hallo Norma,
Vielleicht liegt es am Datentyp?
Decimal ist ja Fließkomma, und da gibt es, wie ich
gelesen habe, Ungenauigkeiten.
Versuche doch mal den Typ Währung. Damit kannst
Du ganz prima Dezimalzahlen darstellen, und es gibt
4 Stellen nach dem Komma, die eine ausreichende
Genauigkeit ergeben sollten. I.Ü. wird IMO im Finanz-
bereich auch mit 4 Stellen gerechnet (oder waren es fünf?).
gruss ekkehard

normadrei
26.05.2012, 20:45
Hallo,

eigentlich wollte ich ja aufgaben, aber es ließ mir dann doch keine Ruhe. Und: Ich habe den Fehler gefunden!! Er kamm allerdings aus einer g a n z anderen Ecke (Schande über mich).

Ich habe die Anzahl Tage so berechnet:

intTage = DateDiff("d", dteVon, dteBis) + 1

Nach einigen Stunden Suchen am falschen Platz kam ich dann doch darauf, dass ich in Schaltjahren + 2 einsetzen muss. Immerhin...

Danke für Eure Hilfe - Grüße normadrei
(und damit Thema erledigt :-))

normadrei
26.05.2012, 20:48
Eberhard, long habe ich an der Stelle auch nur zum Vergleich eingesetzt. Aber, am Ende hattest du doch Recht: Vor dem Runden kommt das Rechnen...

ebs17
26.05.2012, 20:50
Decimal ist ja Fließkomma
Nanu, seit wann?

Aber selbst eine vorhandene Fließkommaproblematik würde nicht zu solchen Abweichungen wie gezeigt führen können.

Wenn man per Taschenrechner richtig und per Access falsch rechnet, stimmt im zweiten Fall der Ablauf nicht. Daher sollte man einen solchen Ablauf nicht nur beschreiben, sondern zeigen, wie er genau umgesetzt wird.

//Edit: Das scheint sich jetzt erledigt zu haben.

Beaker s.a.
26.05.2012, 21:04
Hallo Eberhard,
Zitat:
Decimal ist ja Fließkomma
Nanu, seit wann?
Uups, gefährliches Halbwissen :(
Bezügl. Genauigkeit war es aber auch nur
eine Vermutung.
gruss ekkehard

gpswanderer
27.05.2012, 09:40
Hallo,
Nach einigen Stunden Suchen am falschen Platz kam ich dann doch darauf, dass ich in Schaltjahren + 2 einsetzen muss.Wieso?
DateDiff berücksichtigt doch automatisch die Schaltjahre.
Datediff 1.1.2012 bis 31.12.2012 ergibt 365 Tage +1 = 366
Und wenn der Zeitraum 5 Jahre umfasst, könnten ja 2 Schaltjahre dazwischen liegen, dann müsstest Du ja +3 einsetzen, wenn Deine Überlegung stimmt.