0

二分法を使用して 12 か月でローンを完済するために必要な正確な支払いをセント単位で見つけるためのコードを作成する必要があります。このために作成したコードは機能しますが、目標を超えています。ローンは 12 か月以内に返済されますが、12 回の支払いを行った後、最終的な残高は約 0 になるはずです。しかし、それははるかに大きな負の数です。

私が使用しているコードは次のとおりです。

StartBalance = float(raw_input('Credit Balance in $: '))
AnnualRate = float(raw_input('Annual interest rate in decimals: '))
MonthlyRate = AnnualRate / 12.0
MinPaymentLow = StartBalance / 12.0
MinPaymentHigh = (StartBalance*(1+MonthlyRate)**12.0)/12.0
cent = 0.01
Payment = (MinPaymentHigh+MinPaymentLow)/2.0

while (Payment*12-StartBalance) >= cent:
    for month in range(0, 12):
        Balance = (StartBalance-Payment)/10*(1+MonthlyRate)   
    if Balance < 0:
        MinPaymentLow = Payment
    elif Balance > 0:
        MinPaymentHigh = Payment
    Payment = (MinPaymentHigh + MinPaymentLow)/ 2.0

print 'RESULT'           
print 'Number of months needed: 12'
print 'Montly pay: $', round(Balance,2)
4

2 に答える 2

0

次の行のようになります。

for month in range(0, 12):
    Balance = (StartBalance-Payment)/10*(1+MonthlyRate)   

次のようにする必要があります。

Balance = StartBalance
for month in range(0, 12):
    Balance = (Balance-Payment) * (1 + MonthlyRate)  

または、利息を計算する方法、および支払いが月初または月末に発生するかどうかに応じて、同様のもの。

于 2013-09-04T18:17:05.803 に答える
0

あなたのコードは私にとってはうまくいくように見えましたが、「かなり離れた」結果が得られた場合は、おそらくfloatデータ型を使用していることが原因です。浮動小数点は、すべての操作で丸められるため、信頼できません。十分な反復を行うと、多くの金額を四捨五入できます。decimal代わりに使用してみてください。このモジュールは、10 進数をインデックス付きの整数値として追跡します。

于 2013-09-04T15:46:43.487 に答える