2012-01-28 5 views
0

Я пытаюсь создать калькулятор платежей, однако я столкнулся с ошибкой, в которой остаток остается отрицательным, а не $ 0. Вот код:

int main() 
{ 
double selling, down, intRate, intBal, toBal, payment, loan, loanN, d; 
int counter, i; 

printf("Cost of item: "); 
scanf("%lf", &selling); 

printf("Down payment on item: "); 
scanf("%lf", &down); 

printf("Interest rate: "); 
scanf("%lf", &intRate); 

printf("Monthly payment: "); 
scanf("%lf", &payment); 

d= selling * 100.0; 
i = d + 0.5; 
selling = i/100.0; 

d= down * 100.0; 
i = d + 0.5; 
down = i/100.0; 

d= payment * 100.0; 
i = d + 0.5; 
payment = i/100.0; 

counter = 1; 

loan = selling - down; 

printf("--------------------------------------------------------------\n"); 
printf("Selling Price  = %8.2lf\n", selling); 
printf("Down Payment   = %8.2lf\n", down); 
printf("Amount of Loan  = %8.2lf\n", loan); 
printf("Annual Interest Rate = %8.2lf\n", intRate); 
printf("Monthly Payment  = %8.2lf\n", payment); 
printf("--------------------------------------------------------------\n"); 
printf("Pay # Old Balance Payment Interest To Balance New Balance\n"); 
printf("----- ----------- ------- -------- ---------- -----------\n"); 

while (loan > 0) 
{ 
if (loan < payment) 
{ 
    payment = loan + intBal; 
} 
printf("%5i %11.2lf %7.2lf ", counter, loan, payment); 
intBal = intRate * loan/12; 
printf("%8.2lf ", intBal); 
toBal = payment - intBal; 
printf("%10.2lf ", toBal); 
loanN = loan - toBal; 
loan = loanN; 
printf("%11.2lf\n", loanN); 
counter++; 
} 
return 0; 
+1

Какой вопрос, что же ты стараешься, что ты понял? Вы использовали отладчик для отладки вашей программы? –

+1

** Никогда не используйте плавающие точки для представления денег **. Кроме того, правильно отформатируйте (отступ) свой код. –

+0

Нет, я не использовал отладчик. Проблема, с которой я столкнулась, - это цикл While. Если сумма кредита составляет 1000 с процентом 0,18 первоначального взноса 0 и ежемесячного платежа 0, конечный результат должен быть равен 0 долларам за оставшийся остаток, однако он составляет -0,73. И нет, я не использовал отладчик - я беру базовый курс программирования, поэтому я действительно не был знаком с ним, хотя знаю его цель. – boutrosc

ответ

0

Вы начисляете их дважды за проценты в конце кредита. Переместить

if (loan < payment) 
{ 
    payment = loan + intBal; 
} 

к после этой линии

intBal = intRate * loan/12; 
+0

Это намеренно; банку нужно как-то заработать деньги! :-D –

+0

LOL, это именно то, что я думал. –

+0

Удивительный! Спасибо за помощь. – boutrosc