答案在不应该的时候四舍五入 C++
Answer is rounding when it shouldn't C++
#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 个 floating-point 值,我们希望存储在类型 double
的变量中的精度是正确的数字。
因此,您应该将变量的数据类型设置为 double
,并且 NOT float
。这应该可以解决手头的问题。
希望这对您有所帮助。
使用浮点数进行高精度运算可能很少是个好主意,32 位 float
尤其糟糕。它的精度只有 24 位,大致表示 6 到 7 位十进制数字。此外,如果您对浮点数执行某些算术运算(例如除法),结果将更加不精确。
因此,如果您想保持简单,请使用 double
。它提供了大约 53 位的精度,可以表示大约 16 到 17 位十进制数字。
或者稍微好一点,使用 long long
之类的整数类型并将其视为美分。整数运算更加精确和可预测。
最后,您始终可以使用高精度库,但我认为 double
或 long long
对您来说已经足够了。
#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 个 floating-point 值,我们希望存储在类型 double
的变量中的精度是正确的数字。
因此,您应该将变量的数据类型设置为 double
,并且 NOT float
。这应该可以解决手头的问题。
希望这对您有所帮助。
使用浮点数进行高精度运算可能很少是个好主意,32 位 float
尤其糟糕。它的精度只有 24 位,大致表示 6 到 7 位十进制数字。此外,如果您对浮点数执行某些算术运算(例如除法),结果将更加不精确。
因此,如果您想保持简单,请使用 double
。它提供了大约 53 位的精度,可以表示大约 16 到 17 位十进制数字。
或者稍微好一点,使用 long long
之类的整数类型并将其视为美分。整数运算更加精确和可预测。
最后,您始终可以使用高精度库,但我认为 double
或 long long
对您来说已经足够了。