#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。
答案 0 :(得分:1)
说实话,您遇到的问题是您使用的是float
类型,而不是double
。实际上,这会导致您的十进制值不太精确。
如果我在不改变数据类型的情况下将精度设置为3,那么我得到的数字是:25068.765。但是,如果我将数据类型更改为double
并将精度保持为3,那么我得到的数字为25068.764。
现在给出2个浮点值,我们可以预期存储在double
类型变量中的那个值是正确的数字。
因此,您应将变量的数据类型设置为double
, NOT float
。这应该可以解决手头的问题。
希望这有帮助。
答案 1 :(得分:1)
使用浮点数进行高精度算术可能不是一个好主意,而32位float
尤其糟糕。它的精度仅为24位,大致为6到7位十进制数。此外,如果您对浮点数执行某些算术运算(例如除法),结果将更加精确。
因此,如果您想保持简单,请使用double
。它提供大约53位的精度,可以代表大约16到17个十进制数字。
或者稍微好一点使用像long long
这样的整数类型并将其视为美分。整数算术更加精确和可预测。
最后,您可以随时使用高精度库,但我认为double
或long long
对您来说已经足够了。