2016-11-12 3 views
0

Ich schreibe gerade ein C-Programm, das unter anderem eine Tilgungstabelle mit auf zwei Stellen gerundeten Zahlen erzeugt und ausdruckt. Ich bekomme überall die richtigen Nummern, also: monthly_payment = principal_paid + interest_paid außer in der letzten Zeile (letzte Zahlung), wo sich gelegentlich meine Ergebnisse nicht summieren und um eins. Zum Beispiel:Rundung in einer Tilgungstabelle

MonthlyPay: 88.83, PrinPaid: 87.96, IntPaid: 0,88

Natürlich Blick auf die Ergebnisse zu 6 Ziffern gedruckt es leicht zu sehen ist, warum dies geschieht:

MonthlyPay: 88,834637, PrincPaid : 87.955087, IntPaid: 0.879551

Was ist der beste Weg, um eine Situation wie diese zu behandeln?
Was machen Finanzinstitute?

+2

Die letzte Zeile einer Amortisation ist normalerweise anders. Es muss etwas anders berechnet werden als die anderen Zeilen. Die letzte Zahlung sollte der letzte Saldo zuzüglich der Zinsen aus der letzten Periode sein, da dies der Betrag ist, der zu einem Endsaldo von Null führt. Sie könnten die Berechnungen in Pennies tun, um Rundungsfehler zu bekämpfen. Für maximalen Realismus, stellen Sie sicher, dass die Rundung von Pfennigen zu Gunsten der Bank erfolgt –

+1

Ich mache die Berechnung für die letzte Zahlung etwas anders, und deshalb habe ich diese Rundungsprobleme. Jedenfalls habe ich eine einfache Routine eingeführt, die überprüft, ob die Summe der gerundeten Zins- und Tilgungszahlungen gleich der monatlichen Zahlung ist, und wenn dies nicht der Fall ist, fügt sie der monatlichen Zahlung oder der Zinszahlung einen Cent hinzu. Es sieht aus wie ein Hack, aber es funktioniert wie ein Zauber. Und es begünstigt immer die Bank. – JSz

+0

@JSz - Klingt wie die richtige Lösung für mich. –

Antwort

0

Es gibt keinen Standard.

Es sind diejenigen, die sagen, "Once you round, use the rounded value for all further totals."

Es gibt andere, die nicht einverstanden sind, sagen, dass you should sum the unrounded values to avoid accumulated rounding error. Zum Beispiel, 0,0666 + 0,0666 + 0,0666 + ... 15 mal sollte ungefähr gleich 1,0000 sein, aber wenn jeder Term auf 2 Dezimalstellen vor der Summierung gerundet wird, ergibt sich 0,07 * 15 = 1,05! Das ist das Argument für die Verwendung von nicht gerundeten Werten. Ihr Off-by-One ist nur off-by-one, weil Sie nur zwei Begriffe haben, die Sie summieren.

Ich denke, letztlich müssen Sie die Vor- und Nachteile der einzelnen Methoden berücksichtigen. Wer wäre an den Rundungsfehlern interessiert? Nur die Programmierer? Buchhaltung? Kunden? Wie wirkt sich das auf diese Leute aus? Und können Sie eine Anweisung ausgeben, die die Mehrdeutigkeit löscht, wie "Values displayed to 2 decimal places." In diesem Fall runden Sie überhaupt nichts ab, sondern zeigen einfach die ersten zwei Dezimalstellen überall an.

+0

Ich habe versucht, gerundete Werte in der Berechnung zu verwenden, aber das funktioniert hier einfach nicht. Zum einen gab es in einigen Fällen riesige kumulative Fehler im Vergleich zu Berechnungen, bei denen keine gerundeten Werte verwendet wurden. Für zwei war in einem Fall die auf den nächsten Cent gerundete Zinszahlung gleich der monatlichen Zahlung! Das führte zu einem interessant aussehenden Tilgungstisch, der mich anschrie. – JSz