对于我的作业,我应该从文件中读取双值并对它们进行排序。这些是一些价值观。但是当我用我的代码读取它们时,当打印它用于测试时,它们是以整数形式写的。
std::ifstream infile (in_File);
double a;
while(infile>>a)
{
std::cout<<a<<std::endl;
}
我的双打是以185261.886524
然后237358.956723
我的代码会打印185262
然后打印237359
,然后再打印。
答案 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;
}