2

据我了解,setprecision 函数指定了最小精度,但是当我运行以下代码时,我只得到小数点后的 3 个数字:

int main()
{
    double a = 123.4567890;
    double b = 123.4000000;
    std::cout << std::setprecision(5) << a << std::endl; // Udesireble 
    std::cout.setf(std::ios::fixed);
    std::cout << std::setprecision(5) << a << std::endl; // Desireble 

    std::cout << std::setprecision(5) << b << std::endl; // Udesireble
    std::cout.unsetf(std::ios::fixed);
    std::cout << std::setprecision(5) << b << std::endl; // Desireble 
    return 0;
}

打印:

123.46      // Udesireble
123.45679   // Desireble 
123.40000   // Udesireble
123.4       // Desireble

有什么办法可以避免自己检查小数点后的位数以知道是否设置为 fixed ?

4

2 回答 2

1

我的印象是您需要先格式化string,然后用空格替换尾随零。

于 2013-09-02T07:24:05.837 回答
0

对于流,您可以使用两个函数。 setfill(char_type c),设置要写入的字符,以匹配所需字符的数量(更多信息here

有 setw(int) 函数,它设置要显示的值的字段宽度。(这里的文档)

使用这些功能,你可能有一个解决方案

于 2013-09-02T07:35:09.970 回答