Hallo Leute,
habe hier ein rechnerisches Problem in einem VB-Programm. Rein programmtechnisch ist eine Änderung aufwendig, ich müsste einige Programmteile neu schreiben und es handelt sich mittlerweile um ein größeres Projekt.
Dieses Phänomen tritt nur bei einzelnen Zahlen auf, ich weiß nicht, ob man es überhaupt als Rundungs- oder Rechenfehler bezeichnen kann, jedenfalls geht es um ein Modul für das Berechnen von Steueranteilen:
Berechnung des Nettowertes aus Bruttowert und Prozentsatz:
sngNetto = sngBrutto / ((100 + sngMwSt) / 100)
bei 19 % ergibt das bei 697,- Brutto ein Netto von 585,71
(eigentlich also 585,714285 Periode)
Nun ergibt sich eine Veränderung eines schon bestehenden Bruttowertes, wenn er aus Nettowert und Prozentsatz neu errechnet wird:
sngBrutto = (sngNetto * (100 + sngMwSt)) / 100
jetzt kommt 696,99 heraus
(also 696,9946)
Da ich mit kaufmännischer Rundung hier anscheinend nicht weiterkomme, frage ich, ob es vielleicht eine andere Methode gibt, das Problem mathematisch zu lösen. Oder eine Erhöhung der Nachkommastellung + Rundung?
Thx,
UselessUser
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Jaja der beliebte Rundungspfennig/ -cent- Ist zwar schon etwas über 10 Jahre her, daß ich mal die Finger in einem Projekt mit einer "Nebenbuchhaltung" hatte. Beim Test hatten wir mit Preisen aus der geltenden Preisliste alles hinbekommen, bis hin zu Teilgutschriften. Dann gab es eine Preisänderung und dann war das Thema auch akut. Wir haben das nach meiner Erinnerung so gelöst, daß wir aus dem Nettobetrag den Mehrwertsteuerbetrag ermittelt haben (kaufmännisch gerundet) und dann beide Werte addiert wurden. Rückwärts - aus Bruttobetrag Mehrwertsteueranteil ermitteln (kaufmännisch gerundet) und dann subtrahieren sollte zu identischen Ergebnissen führen. Bin ich mir jetzt aber nicht 100% sicher. Auf jeden Fall klappte es nicht ohne den "Zwischenschritt" der Strichrechnung.
... oder siehe auch da:
http://de.wikipedia.org/wiki/Runden
* 1 Kaufmännisches Runden
* 2 Unverzerrte oder Mathematische Rundung
* 3 Summenerhaltendes Runden
* 4 Abrunden
* 5 Rappenrundung
* 6 Rechnen mit gerundeten Zahlen
* 7 Siehe auch
..... Für die Rundung in Mikroprozessoren ....
d-oli
Hi!
Nein, da ist mit "Rechenlogik" nichts zu machen. Diese Art der Rundungsdifferenz muss man IMHO "organisatorisch" beheben.
In der ERP-Software, in der ich gelegentlich herumwühle, "löst" man das auf zwei Arten:
1. Es gibt bei FiBu-Buchungen extra ein Sachkonto für Rundungsdifferenzen.
Frag mich nicht nach dem Umgang damit. ich weiss, dass es das gibt und dass man in der FiBu so Ausgleichsbuchungen durchführt. Das scheint irgendwie "sauber" genug zu sein. 8Zu den Details im FiBu-bereich) hab' ich leider wirklich NULL Plan. ;-)
Kann auch sein, dass ich mich irre und das nur für Differenzen aus Währungsumrechnungen gedacht ist (ich komme darauf, weil mir die Rechtschreibkorrektur gerade Währungsdifferenzen, statt Rundungsdifferenzen vorgeschlagen hat...).
2. Im Bereich der Auftragserfassung werden sowohl Brutto, als auch Nettowerte in den Auftragsdaten gespeichert.
In den VK-Auftragspositionen (als griffiges Beispiel) hat man da i.d.T Felder angelegt, die sowohl den Netto, als auch den ursprünglich angezeigten Bruttowert halten. Egal, was nun nun woraus berechnet: man hat quasi immer das "Original" mit dabei, so dass man hinterher ohne Verrenkungen auf den ursprünglichen Wert zugreifen kann.
Bis dann
Andreas
Danke für eure Beiträge! Ja, ich glaube nach einigen Rechenversuchen auch nicht mehr so an eine mathematische Lösung, das mit der Strichrechnung hat bei mir nicht hingehauen.
Ich werde es wohl doch "organisatorisch" machen. In einer Funktion wird überprüft, ob man auf den Nettowert in der Eingabemaske durch die erste Formel kommt, sofern schon ein Brutto eingegeben wurde:
sngNetto = sngBrutto / ((100 + sngMwSt) / 100)
Ist das der Fall, wird der alte Bruttowert beibehalten. Wenn nicht, wurde der Nettowert verändert und dann der Bruttowert nach der zweiten Formel neu errechnet.
Mal sehen, ob es klappt ...
MfG
UselessUser