23.940.000,00/150.000.000,00 ergibt exakt 0,1596. Das ist (19/119) nach 4 Nachkommastellen abgeschnitten. Das kann natürlich kein korrektes Ergebnis liefern.
Am besten funktioniert noch alle Zahlen in float zu casten und dann zurück in numeric.
Genau das möchte man ja nicht machen, wenn man mit Geld-Beträgen arbeitet. Deswegen ja numeric, damit keine Genauigkeit verlorgen geht, da intern mit Integern gerechnet wird.
Offenbar verwendet FireBird bei den Zwischenergebnissen gerundete oder abgeschnittene Werte. Deswegen ist der Hinweis auf den float-Cast vielleicht doch nicht so abwegig.
Die Formel
Brutto*(MWStSatz/(MWStSatz + 100)
muss schon ohne Rundung der Zwischenergebnisse durchgeführt werden. Wenn Zwischenergebnisse gerundet werden sollen, dann wird das in der Regel auch so beschrieben. Andernfalls muss man mit der erforderlichen Genauigkeit rechnen, zwar mit den eingegebenen Integer- bzw. Round(x,2)-Werten aber nicht gerundeten Zwischenwerten.
Ich zitiere hier mal aus dem offiziellen Programmablaufplan für die Einkommensteuerberechnung:
Zitat:
Bei der Steuerberechnung werden Gleitkommafelder verwendet.