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