2016-11-12 74 views
0

我目前正在編寫一個C程序,其中包括生成並打印出一個攤銷表,其中數字四捨五入爲兩位數。我在任何地方都能得到正確的數字,即:monthly_payment = principal_paid + interest_paid,除了最後一行(最後一次付款),偶爾我的結果不加起來,並且減去1。例如:在攤銷表中舍入

MonthlyPay:88.83,PrinPaid:87.96,IntPaid:0.88

當然看着打印6位數字很容易看到爲什麼發生這種情況的結果:

MonthlyPay:88.834637,PrincPaid :87.955087,IntPaid:0.879551

處理這種情況的最佳方法是什麼?
金融機構做什麼?

+2

攤銷中的最後一行通常是不同的。它必須以與其他行略有不同的方式進行計算。最後的付款應該是最後的餘額加上上一期的利息,因爲這是導致最終餘額爲零的金額。你可以用便士來進行計算,以消除舍入誤差。對於最大的現實主義,確保所有四捨五入的分數便士都在銀行的青睞 –

+1

我在做最後一次付款的計算略有不同,這就是爲什麼我有這些舍入問題。在任何情況下,我最終都會做一個簡單的例程,檢查整數利息和本金付款的總和是否等於每月付款,如果不是,則每月付款或利息付款增加一分錢。它看起來像一個黑客,但它像一個魅力。它總是有利於銀行。 – JSz

+0

@JSz - 聽起來像是我的正確解決方案。 –

回答

0

沒有標準。

還有那些誰說,"Once you round, use the rounded value for all further totals."

有其他人誰不同意,說you should sum the unrounded values to avoid accumulated rounding error。例如,0.0666 + 0.0666 + 0.0666 + ... 15次應該近似等於1.0000,但是如果在求和之前將每個項四捨五入到小數點後兩位,結果爲0.07 * 15 = 1.05!所以這是使用未被包含的值的論點。因爲你只有兩個術語加在一起,所以你的off-by-one只有一個

我認爲最終你必須考慮每種方法的優缺點。誰會對舍入錯誤感興趣?只是程序員?會計?顧客?它如何影響這些人?你可以發出一個清除含糊不清的聲明,如"Values displayed to 2 decimal places.",在這種情況下,你根本不會收集任何東西,只需顯示前後兩位小數。

+0

我試圖在計算中使用四捨五入的值,但在這裏根本不起作用。 其中之一,在某些情況下,與未使用舍入值的計算相比,存在巨大的累積誤差。 對於兩種情況,在一種情況下,四捨五入到最接近的美分的結息等於每月付款!這肯定會導致一個有趣的看起來攤銷表尖叫着我。 – JSz