我遇到strtof转换问题,某些值运行良好,但另一些值返回+1或-1值。我的程序从文件中读取值,但为了简单起见,我尝试将值直接放入strtof并且它具有相同的行为。
我的简单代码:
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("%f", strtof("17309217",NULL));
}
返回
17309216.000000
如果我转换&#34; 17309216&#34;它给出的值相同或&#34; 17309215&#34;。
我一直在做更多的测试,它似乎是&#34;模式&#34;,&#34; 17309214&#34;效果很好,但&#34; 17309213&#34;,&#34; 17309212&#34;和&#34; 17309211&#34;所有回报&#34; 17309212&#34;。在此之后&#34; 17309210&#34;效果很好,但&#34; 17309209&#34;,&#34; 17309208&#34;和&#34; 17309207&#34;返回&#34; 17309208&#34;,依此类推......
这种行为有什么解释?现在我用其他方法转换字符串,我不需要一个方法来转换它。我只想知道为什么strtof会这样做,所以我可以决定在哪里使用它以及在哪里可以。
我一直在阅读其他一些与错误转换相关的问题,但都与小数舍入有关,而不是整个单元。
提前致谢,
答案 0 :(得分:0)
您正在转换为32位浮点,可能无法处理那么多位数的精度。