我需要将字符串转换为浮点数。如果字符串不是数字,我希望返回 0。
我试图atof()
通过使用以下代码来测试该功能是否适用:
printf("%f", atof("1a"));
根据我对 atof 的理解,当 atof 无法转换时返回的值为 0,而这一行打印1.0
.
为什么会这样?通过文档,我了解到 atof 意味着只要输入不是数字就返回 0 。
从文档。强调我的
该函数首先根据需要丢弃尽可能多的空白字符(如在 isspace 中),直到找到第一个非空白字符。然后,从这个字符开始,尽可能多地采用类似于浮点文字的语法(见下文)的有效字符,并将它们解释为数值。最后一个有效字符之后的字符串的其余部分将被忽略,并且对该函数的行为没有影响。
然而这一行打印 1.0.
printf("%f", atof("1a"));
工作,因为atof
可以解析至少一个数字,即1
在这种情况下。
但:
char a[]="a1";
printf("%f\n",atof(a));
应该如您预期的那样给您返回值 0.0。
我看到您检查了一些文档,但您一定错过了强调的部分 - 确保您彻底阅读文档很重要:http ://www.cplusplus.com/reference/cstdlib/atof/
该函数首先根据需要丢弃尽可能多的空白字符(如在 isspace 中),直到找到第一个非空白字符。然后,从这个字符开始,尽可能多地采用类似于浮点文字的语法(见下文)的有效字符,并将它们解释为数值。最后一个有效字符之后的字符串的其余部分将被忽略,并且对该函数的行为没有影响。
因此,该函数的行为完全符合其应有的行为 -a
字符"1a"
被忽略。