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.940 Themen, 20.676 Beiträge
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