0

我有以下部分代码:

string v;

getline(linestream,v,' ');

double d=atof(v.c_str());

fprintf(writeFile3,"%f\n",(double)d);   

但是可以说第一行的值为 0.08012901 但 d=0.080129 最后两个值被省略,我怎样才能获得完整的双精度值?

谢谢

4

3 回答 3

1

如果您想要精确复制数字,到目前为止,最简单的方法是将数字保留为字符串形式:

string v;

getline(instream, v, ' ');

outstream << v;

几乎任何将数字转换为 a double,然后打印出该值的东西至少有一些机会产生与输入略有不同的结果。

于 2014-12-23T21:48:10.923 回答
0

并不是小数位不存储在d. 只是fprintf默认情况下只打印 6 位小数。要打印 8,请尝试

fprintf(writeFile3, "%.8f\n", d);

您不必强制转换d为 a ,double因为它已经是 type double

于 2014-12-23T21:44:30.583 回答
0

我会在上面的答案中补充一点,无论您在变量调用之后放置的内容都是您将显示的内容。默认情况下,C++ 将显示 6。

即 fprintf(writeFile3, "%.3f\n", (double)d); 最后将显示 3 个小数点。它也会填充,所以如果有可能超过 8 位小数,你会想要让它更多。我知道你不能设置一个标志来显示所有小数点。它必须是明确的。

于 2014-12-23T21:51:43.023 回答