(C ++)std :: istringstream从字符串到双精度读取最多6位数字

时间:2013-07-10 20:25:03

标签: c++ istringstream sstream

人们!我一直在努力解决这个问题,到目前为止我还没有找到任何解决方案。

在下面的代码中,我使用数字初始化一个字符串。然后我使用std :: istringstream将测试字符串内容加载到double中。然后我提出两个变量。

#include <string>
#include <sstream>
#include <iostream>

std::istringstream instr;

void main()
{
    using std::cout;
    using std::endl;
    using std::string;

    string test = "888.4834966";
    instr.str(test);

    double number;
    instr >> number;

    cout << "String test:\t" << test << endl;
    cout << "Double number:\t" << number << endl << endl;
    system("pause");
}

当我运行.exe时,它看起来像这样:

字符串测试:888.4834966
双号888.483
按任意键继续 。 。 。

字符串有更多数字,看起来std :: istringstream只加载了10中的10个。如何将所有字符串加载到double变量中?

3 个答案:

答案 0 :(得分:5)

#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>

std::istringstream instr;

int main()
{
    using std::cout;
    using std::endl;
    using std::string;

    string test = "888.4834966";
    instr.str(test);

    double number;
    instr >> number;

    cout << "String test:\t" << test << endl;
    cout << "Double number:\t" << std::setprecision(12) << number << endl << endl;
    system("pause");

    return 0;
}

它读取所有数字,它们并非全部显示。您可以使用std::setprecision(在iomanip中找到)来更正此问题。另请注意,void main不是标准,您应该使用int main(并从中返回0)。

答案 1 :(得分:1)

输出的精确度可能只是没有显示number中的所有数据。有关如何格式化输出精度的信息,请参阅此link

答案 2 :(得分:1)

您的双倍值为888.4834966,但使用时为:

cout << "Double number:\t" << number << endl << endl;

它使用double的默认精度,手动设置它:

cout << "Double number:\t" << std::setprecision(10) << number << endl << endl;