我有以下部分代码:
string v;
getline(linestream,v,' ');
double d=atof(v.c_str());
fprintf(writeFile3,"%f\n",(double)d);
但是可以说第一行的值为 0.08012901 但 d=0.080129 最后两个值被省略,我怎样才能获得完整的双精度值?
谢谢
如果您想要精确复制数字,到目前为止,最简单的方法是将数字保留为字符串形式:
string v;
getline(instream, v, ' ');
outstream << v;
几乎任何将数字转换为 a double
,然后打印出该值的东西至少有一些机会产生与输入略有不同的结果。
并不是小数位不存储在d
. 只是fprintf
默认情况下只打印 6 位小数。要打印 8,请尝试
fprintf(writeFile3, "%.8f\n", d);
您不必强制转换d
为 a ,double
因为它已经是 type double
。
我会在上面的答案中补充一点,无论您在变量调用之后放置的内容都是您将显示的内容。默认情况下,C++ 将显示 6。
即 fprintf(writeFile3, "%.3f\n", (double)d); 最后将显示 3 个小数点。它也会填充,所以如果有可能超过 8 位小数,你会想要让它更多。我知道你不能设置一个标志来显示所有小数点。它必须是明确的。