Возникли проблемы с математическими вычислениями и функцией setprecision () - PullRequest
0 голосов
/ 22 сентября 2019

Кажется, у меня проблема с вопросом о кодировании на C ++.Она включает в себя математическую арифметику, и я, кажется, правильно получаю все свои результаты, кроме финального.В дополнение к этому, формат моих ответов в десятичной запятой кажется неправильным.Ответы должны содержать два десятичных знака, но, похоже, только два из моих четырех десятичных знаков имеют два десятичных знака.Когда я пытаюсь использовать функцию точности (), ответы вводятся в научную нотацию, которая мне не нужна.

Вот вопрос и ответ: enter image description here

Вот мой код:

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
    float principal;
    float interest_rate;
    float times_compounded;

    cout << "Hello, please enter a value for your principal: ";
    cin >> principal;
    cout << principal << endl;
    cout << "Please enter a value for your interest rate: ";
    cin >> interest_rate;
    cout << interest_rate << "%" << endl;
    cout << "Please enter the number of times the interest is compounded during the year: ";
    cin >> times_compounded;
    cout << times_compounded << endl << endl;

    float interest = interest_rate * 10.197647;
    float amount = principal * pow((1 + (interest_rate/times_compounded)), times_compounded);

    cout << "Interest Rate: " << setw(19) << interest_rate << "%" << endl;
    cout << "Times Compounded: " << setw(17) << times_compounded << endl;
    cout << "Principal: " << setw(17) << "$ " << setw(7) << principal << endl;
    cout << "Interest: " << setw(20) << "$ " << interest << endl;
    cout << "Amount in Savings: " << setw(9) << "$ " << amount;

    return 0;
}

Вот мои три входа: 1000, 4,25, 12

Любые отзывы будут оценены, спасибо за ваше время.

1 Ответ

1 голос
/ 22 сентября 2019

Во-первых, последнее значение неверно, потому что вы используете процентную ставку как нормальное число в формуле, хотя на самом деле это процент.Поэтому вам нужно разделить его на 100:

float amount = principal * pow((1 + ((interest_rate / 100) /times_compounded)), times_compounded);

Теперь для точности вы можете использовать std::fixed в сочетании с std::setprecision, чтобы установить точность печати с плавающей запятой по умолчанию при использовании std::cout,Мы можем использовать макрос, чтобы сделать его более читабельным, например:

#define FIXED_FLOAT(x, p) std::fixed<<std::setprecision(p)<<(x)

Итак, полный раздел вывода будет выглядеть так:

cout << "Interest Rate: " << setw(19) << FIXED_FLOAT(interest_rate, 2) << "%" << endl;
cout << "Times Compounded: " << setw(17) << FIXED_FLOAT(times_compounded, 0) << endl;
cout << "Principal: " << setw(17) << "$ " << setw(7) << FIXED_FLOAT(principal, 2) << endl;
cout << "Interest: " << setw(20) << "$ " << FIXED_FLOAT(interest, 2) << endl;
cout << "Amount in Savings: " << setw(9) << "$ " << FIXED_FLOAT(amount, 2);

Кроме того, interest = interest_rate * 10.197647 кажется подозрительным.Проценты должны быть только суммой минус основная сумма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...