#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
//Declaration of Variables
float TotalCollected; // Total Amount Collected from sales
double sales; // Sale excluding tax
float CountyTaxRate; // Tax rate for County
float StatesTaxRate; // Tax rate for state
cout << setprecision(2) << fixed << showpoint;
//We get data from the user
cout << "What is the Total Collected Amount? ";
cin >> TotalCollected;
cout << "What is the County Tax rate? ";
cin >> CountyTaxRate;
cout << "What is the State Tax rate ";
cin >> StatesTaxRate;
//Calculations
sales = TotalCollected / (1 + StatesTaxRate + CountyTaxRate);
//Output
cout << "Sales: $" << sales << endl;
return 0;
}
Ставка налога округа = .02 ставка налога штата = .04
общая собранная сумма = 26572,89
Выход должен быть 25068,76, но я продолжаю получать 25068,77.
Если честно, проблема, с которой вы столкнулись, заключается в том, что вы используете тип float
, и не double
, Это, по сути, делает ваши десятичные значения менее точными.
Если я установлю точность на 3 без изменения типа данных, то получу число: 25068,765. Однако, если я изменю тип данных на double
и держу точность на 3, тогда я получу число 25068.764.
Теперь, учитывая 2 значения с плавающей точкой, мы ожидаем, что прецизионное значение хранится в переменной типа double
быть правильным номером.
Поэтому вы должны установить тип данных ваших переменных в double
, а также НЕ float
, Это должно решить проблему под рукой.
Надеюсь это поможет.
Вероятно, редко бывает хорошей идеей использовать числа с плавающей точкой для арифметики высокой точности и 32-разрядных float
особенно плохо. Его точность составляет всего 24 бита, что примерно равно 6-7 десятичным цифрам. Также, если вы выполняете определенные арифметические операции (например, деление) над числами с плавающей запятой, результат будет еще менее точным.
Так что если вы хотите, чтобы все было просто, используйте double
, Точность составляет около 53 бит, что может представлять примерно от 16 до 17 десятичных цифр.
Или немного лучше использовать целочисленные типы, такие как long long
и относиться к нему как центы. Целочисленная арифметика гораздо более точна и предсказуема.
Наконец, вы всегда можете использовать высокоточную библиотеку, хотя я думаю, double
или же long long
будет достаточно для вас.