设定精度在分配的数字之前的小数点后给出零

时间:2013-01-22 22:35:25

标签: c++

当我在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;

}

3 个答案:

答案 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.09393 - 两个有意义的数字。

答案 2 :(得分:0)

cout << fixed <