从文件中读取 double

Reading double from file

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

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

我的双打是从 185261.886524 开始,然后是 237358.956723

我的代码打印 185262 然后 237359 然后依此类推。

尝试将此添加到 main() 的顶部:

setlocale(LC_ALL, "C");

This 将为您的程序提供 "C" 语言环境而不是本地语言环境。我想你当地的人使用“,”作为小数点而不是“。”和你的数据一样。

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

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

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

setprecision 更改打印的总位数。

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

#include <locale>

然后使用imbue方法:

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

您的问题不在于输入,而在于输出:cout 默认打印 double 的 6 位数字,这就是为什么您看到四舍五入的值 185262,而不是 185261 正如您对错误输入所期望的那样。使用 std::setprecision 提高输出精度。