从文件中读取双倍

时间:2015-01-07 00:07:42

标签: c++ double readfile

对于我的作业,我应该从文件中读取双值并对它们进行排序。这些是一些价值观。但是当我用我的代码读取它们时,当打印它用于测试时,它们是以整数形式写的。

std::ifstream infile (in_File);
double a;
while(infile>>a)
{
    std::cout<<a<<std::endl;
}

我的双打是以185261.886524然后237358.956723

开始的

我的代码会打印185262然后打印237359,然后再打印。

3 个答案:

答案 0 :(得分:6)

尝试在main()

的顶部添加此内容
setlocale(LC_ALL, "C");

This会为您的计划提供&#34; C&#34;语言环境而不是本地语言环境。我想你当地人用的是&#34;,&#34;作为小数点而不是&#34;。&#34;和你的数据一样。

您还需要在文件顶部添加#include <clocale>

编辑:然后,为了获得更高的精确度,您可以执行#include <iomanip>并在程序的顶部执行此操作:

std::cout << std::setprecision(20);

setprecision会更改打印的总位数。

答案 1 :(得分:1)

您的问题不是输入,但输出:cout默认打印double的6位数,这就是为什么您看到舍入值185262,而不是{{1正如您对不正确的输入所期望的那样。使用std::setprecision来提高输出精度。

答案 2 :(得分:0)

如果您的系统上的本地化设置与.的小数点分隔符不同,则可能会发生这种情况。尝试添加以下内容:

#include <locale>

然后使用imbue方法:

std::ifstream infile (in_File);
infile.imbue(std::locale("C"));
double a;
while(infile>>a)
{
    std::cout<<a<<std::endl;
}