C ++ for-loop не изменит переменную - PullRequest
0 голосов
/ 15 января 2019

** Это мой код, и я хочу, чтобы значение для каждой итерации менялось (оно должно уменьшаться, поскольку это последовательный заем). Я запускаю его в Xcode на MacOS. **

void calculateSeries(){
int loan;
cout<<"Total loan as of today:\n";
cin>> loan;
int series;
cout<<"Number of series\n";
cin>>series;
int interest;
cout<<"Interest:\n";
cin>>interest;
//vector<int> loan_vector(series);
for (int i=1; i<=series; i++){
     double in=(loan/series)+(interest/100)*(loan-(loan/series)*i);

    //cout<<in<<"\n";
    //loan_vector.push_back(in);
        cout<<" Payment year " << i <<" " << in << "\n";}

}

Мой вывод такой:

Total loan as of today:
10000
Number of series
10
Interest:
3
 Payment year 1 1000
 Payment year 2 1000
 Payment year 3 1000
 Payment year 4 1000
 Payment year 5 1000
 Payment year 6 1000
 Payment year 7 1000
 Payment year 8 1000
 Payment year 9 1000
 Payment year 10 1000

1 Ответ

0 голосов
/ 15 января 2019

Ваше выражение (interest/100) с interest типа int является целочисленным делением и - если значение interest равно <100, всегда будет 0, так как любая дробная часть результат будет отброшен (см., например, этот стандартный черновик C ++ онлайн):

5.6 Мультипликативные операторы

  1. ... Для целочисленных операндов оператор / дает алгебраический фактор с любым дробная часть отбрасывается

Следовательно, термин (interest/100)*(loan-(loan/series)*i) тоже будет 0, так что ваш результат будет (loan/series)+0 в каждой итерации.

Запись (interest/100.) (обратите внимание на . в 100., делающем второй аргумент значением с плавающей запятой), так, чтобы термин был делением с плавающей запятой (вместо целочисленного деления).

Кстати: loan и interest должны, вероятно, иметь тип double вместо int в любом случае.

...