答案是四舍五入,当它不应该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.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
对您来说已经足够了。
相关文章:
- 条件断点在不应该触发时触发
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我不应该把所有东西都放在标题中?
- 找不到 QRegularExpression 行为的任何解释。它有效,但不应该
- 在清除 istream 之前,我不应该需要取消获取它吗?
- c++ 为什么我不应该从不同的线程解锁互斥锁
- "typename"不应该只在模板函数或模板类中使用吗?
- 为不应该获得未定义行为的内容获取未定义的行为
- 两种情况下的输出不应该相同吗?
- 默认情况下,"std::shared_ptr"不应该使用"std::d efault_delete"吗?
- 错误代码 E0065 和 E0169 不应该有
- 矢量的值在不应该更改时更改
- 保证复制省略不应该适用吗?
- 不应该禁止访问私有类型吗?
- 使用匿名命名空间中的函数或另一个文件中的静态函数不应该出错吗?
- NRVO不应该保证局部命名变量和调用站点变量采用相同的地址吗?
- 类的私有成员在我的类实例化期间更改,即使他们不应该
- 为什么'system'不应该在 Windows 特定的应用程序中使用
- 正则表达式在我认为不应该在 c++ 中采用等号
- OpenGL - 深度缓冲区在渲染半透明立方体时剪切掉不应该剪切的面