std :: setprecision没有显示尾随小数

时间:2016-12-16 06:56:03

标签: c++ c++11

我正在尝试将double和整数打印为double。为此,我编写了以下程序:

int main()
{
    string object="1";
    std::stringstream objectString;
    objectString << std::setprecision(8) << atof(object.c_str());                
    cout<<"ObjectString="<<objectString.str()<< " "<<std::setprecision(10) <<  double(atof(object.c_str())) <<"\n";
}

我希望输出为:

ObjectString=1.0  1.0

但是,我得到的输出为:

ObjectString=1  1

有人可以建议我哪里出错吗?

2 个答案:

答案 0 :(得分:5)

要强制尾随零,请使用std::fixed

std::string object = "1";
std::stringstream objectString;
objectString << std::fixed << std::setprecision(8) << atof(object.c_str());                
std::cout << "ObjectString=" << objectString.str() << " ";
std::cout << std::fixed << std::setprecision(10) << double(atof(object.c_str())) << "\n";

输出:

ObjectString=1.00000000 1.0000000000

答案 1 :(得分:1)

强制输出始终显示小数点的方法是使用std::showpoint

#include <iostream>
#include <iomanip>

int main() {
    double d = 1.0;
    std::cout << std::setprecision(1) << d << '\n';
    std::cout << std::setprecision(1) << std::showpoint << d << '\n';
    return 0;
}

[temp]$ ./a.out
1
1.
[temp]$