当我使用VS 2015调试以下代码时,
int main()
{
char thev[8] = "0.12345";
float fv = atof(thev);
printf("%f\n", fv);
return 0;
}
监视窗口中的fv值为0.12345004, 并且printf为0.123450,如何让fv = 0.12345在运行时?
有类似的帖子,here,但那里没有答案,有人可以帮我吗?
然后我将该代码粘贴到了VS 2015中,
int main()
{
const char *val = "73.31";
std::stringstream ss;
ss << val;
double doubleVal = 0.0f;
ss >> doubleVal;
}
监视窗口中的doubleVal值为73.310000000000002
答案 0 :(得分:0)
替换以下代码:
new.df.x
具有:
printf("%f\n", fv);
说明:
我们使用宽度(%.5f)表示我们要为输出保留5位数字(位置)。 结果是在打印字符之前放置了5个“空格字符”。并且不会打印下一个字符。
参考:https://www.codingunit.com/printf-format-specifiers-format-conversions-and-formatted-output
答案 1 :(得分:0)
0.12345的IEEE单精度中没有确切的表示。它两侧的最接近的两个值是0.123450003564357757568359375和0.12344999611377716064453125。我认为atof选择了前者,因为它比后者更接近0.12345。