Rechnet Xojo falsch, oder ich?

Hallo,

ich mache gerade ein paar Steuerberechnungen in Xojo und bin dabei auf ein seltsames Ergebnis gestossen. Wenn der Steuersatz (Tax) = 0 ist und der Bruttopreis (Gross_Sum) = 896 dann erhalte ich als errechneten MwSt-Betrag (Tax_Sum) das Ergebnis -1.136868e-13. Ist jedoch der Bruttopreis z.B. 890 dann ist das Ergebnis korrekt 0.

Ist meine Berechnung falsch, oder woran liegt das?

[code]Dim gross_sum, net_sum, tax_sum, tax As Double

tax = 0
gross_sum = 890

net_sum = gross_sum / (100 + tax) * 100

tax_sum = gross_sum - net_sum

msgbox ("Tax Sum: " + Str(tax_sum)) // result = 0, is correct

tax = 0
gross_sum = 896

net_sum = gross_sum / (100 + tax) * 100

tax_sum = gross_sum - net_sum

msgbox ("Tax Sum: " + Str(tax_sum)) // 0 = correct. But the result is = -1.136868e-13[/code]

Das Ergebnis ist nur falsch wenn der Steuersatz 0 ist, wenn der Steuersatz 7 ist, dann sind beide Ergebnisse richtig.

Hi Wolfgang,

Read carefully Str entry in the doc and replace it with Format and you will get 0.

Emile ;-:slight_smile:

wie wre es den Nettobetrag zu runden?

Ich habe es jetzt so gelöst: tax_sum = CDbl(Format(gross_sum - net_sum, "0.000"))

Das würde ich nicht machen, denn intern ist der Wert von z.Bsp. net_sum in der zweiten Berechnung nicht 896, sondern 896,0000000000001137.

Wenn Du Doubles verwendest, läufst Du immer bei irgendwelchen Beträgen in dieses Problem. Ändere den Datentyp Deiner 4 Variablen auf Currency und Du bist dieses Problem los.

Auerdem wrde ich einen Blick auf “Currency” werfen…

Dim gross_sum, net_sum, tax_sum, tax As Currency

hilft auch schon um das richtige Ergebnis zu bekommen.

Nie die einzelnen Faktoren einer Berechnung runden, immer nur das Ergebnis!!!
Wobei die Frage bleibt, ob ein Single für Währungen nicht zweckdienlicher ist als ein Double.

Für Währungsbeträge würde ich nie Single und/oder Double verwenden, sondern Currency (oder Integer und in Cents rechnen und vor der Ausgabe durch 100 dividieren).

Danke, wieder etwas dazu gelernt. Jetzt muss ich mich nur zwischen Single oder Currency entscheiden. Gibt es Unterschiede in der Geschwindigkeit der Berechnung?

Single ist eine Fliekommazahl, wrde ich daher wie schon erwhnt nicht verwenden. Currency ist - soweit ich weiss, intern eine Int64.

Die Frage nach der Geschwindigkeit erbrigt sich heutzutage doch, wir sind doch nicht mehr in den 80ern. Genauigkeit ist bei Whrungsbetrgen ja das Entscheidende.