当我在C ++中使用setprecision(2)尝试对数字进行舍入时,像“0.093”这样的数字会返回-THREE,而不是小数点后的两位数!我无法弄清楚为什么会这样。我在下面列出了我的基本代码,以防我严重遗漏某些问题。谢谢!
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double tax = 0.06 ; //Tax Rate
float cost ; //Cost of item
float computed ; //Non-rounded tax
cout << "Enter the cost of the item: " ;
cin >> cost ;
computed = tax*cost;
cout << "Computed: $" << computed << endl;
cout << "Charged: $" << setprecision(2) << computed << endl; //Computed tax rounded to 2 decimal places
return 0;
}
答案 0 :(得分:8)
这是因为std::setprecision
在小数点后没有设置数字但是如果你没有设置重要(又名“有意义”)数字更改浮点格式以使用小数点后的固定位数。要更改格式,您必须将std::fixed
(documentaion)放入输出流:
cout << "Charged: $" << fixed << setprecision(2) << computed << endl;
答案 1 :(得分:0)
来自:http://www.cplusplus.com/reference/iomanip/setprecision/
小数精度确定在插入操作上写入的最大位数,以表示浮点值。如何解释这取决于floatfield格式标志是否设置为特定的表示法 ...
在默认浮点表示法中,precision字段指定要计算的有意义数字的最大数量,总计算小数点前和小数点后的数字。
在您的情况下:0.093
,93
- 两个有意义的数字。
答案 2 :(得分:0)
cout << fixed <