在Visual Studio中使用atof时很奇怪

时间:2018-07-19 01:32:20

标签: c++ visual-studio

当我使用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

2 个答案:

答案 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。