stringstream在转换时会失去精确度

时间:2015-12-04 18:20:16

标签: c++ precision stringstream

我对stringstream有一个小问题。当我使用它将字符串转换为double时,它会失去精度。

const std::string str = "44.23331002";
double x;
stringstream ss;
ss << str;
ss >> x;
cout << str << " = " << x << endl;

输出是: 44.23331002 = 44.2333

这是为什么?它是否转换为float并且数字精度有限?

2 个答案:

答案 0 :(得分:4)

您需要在输出流上设置精度:

#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;

int main() {
    const std::string str = "44.23331002";
    double x;
    stringstream ss;
    ss << str;
    ss >> x;
    cout << str << " = " << std::setprecision(10) << x << endl;
}

输出:

44.23331002 = 44.23331002

(Demo)

答案 1 :(得分:1)

calcto回答正确。您可以通过两种方式更改精度: std::setprecision(10)std::cout.precision(10)