2017-08-17 16 views
0

我遇到了strtof转换的问题,有些值运行良好,但另一个值返回值+1或-1。我的程序从文件中读取值,但为了简单起见,我试图直接将值写入文件,并且具有相同的行为。C:strtof错误的转换单位

我简单的代码:

#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    printf("%f", strtof("17309217",NULL)); 
} 

它返回

17309216.000000 

相同的值,它给我,如果转换 “17309216” 或 “17309215”。

我一直在做一些更多的测试,它似乎是一个“模式”,“17309214”效果很好,但“17309213”,“17309212”和“17309211”都返回“17309212”。此后“17309210”效果很好,但“17309209”,“17309208”和“17309207”返回“17309208”等等......

此行为的解释是什么?现在我用其他方法转换字符串,我不需要一种方法来转换它。我只想知道strtof为什么这样做,所以我可以决定在哪里使用它,哪里不能。

我一直在阅读一些与错误转换相关的其他问题,但都与小数舍入有关,而不是整个单位。

由于提前,

+1

也许你打算使用** strtod **并使用** double ** s –

回答

0

你转换到可能没有足够的精度来处理多个数位的32位浮点。

+0

谢谢,我知道我错过了一些东西。我的错。 –