将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用

Posted

技术标签:

【中文标题】将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用【英文标题】:convert a number in a string to float in c: atof(), strtof() do not work 【发布时间】:2015-12-09 20:09:13 【问题描述】:

我的 C 生锈了。我正在尝试将字符串转换为浮点(或双精度)。我尝试过 atof() 和 strtof(),并尝试按照说明 here 和 here。没有运气。

这是我的代码:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) 
  float x;
  char a[20];
  strcpy(a,argv[1]);
  x = strtof(a);
  printf("%s\n",a);
  printf("%f\n",x);
  return 0;

运气不好。这是命令行上的输出:

prompt$ ./a.out 2.34
2.34
1426063.000000
prompt$

如果我使用 atoi() 代替,我得到 0.0。

显然我缺少一些简单的东西。这是 ubuntu fwiw 上的 gcc 4.8.4。

如果我使用 -static 标志编译,或者使用 double 代替 float(和 %e 代替 %f),或者包含 math.h,则没有区别。在某些情况下,输出会发生变化,但这仍然是无稽之谈。

谢谢, 彼得

【问题讨论】:

Convert string to float in Objective-C的可能重复 您是否禁用了警告或什么? strtof() 的原型看起来与你想象的完全不同。 【参考方案1】:

您还没有包含&lt;stdlib.h&gt; 以获得strtof() 的原型。所以返回类型默认为int。但自 C99 以来,隐式 int 规则已从 C 中删除。

用法也是错误的。至少应该是:

char *eptr;

x = strtof(a, &eptr);

并检查 eptr 是否有转换失败。

编译时启用警告。 GCC 警告:

警告:函数‘strtof’的隐式声明 [-Wimplicit-function-declaration]

【讨论】:

好的,谢谢。我没有禁用警告,也没有收到警告,但这显然是问题所在。包括 stdlib.h,并在 strtof() 中添加第二个参数“NULL”,一起修复它。但是,我认为 strcpy() 的用法实际上是正确的; argv[1] 已经是一个指针。 糟糕,您的意思是使用 strtof(),而不是 strcpy()。是的,你是对的,我对 strtof() 的使用不正确(叹气)。

以上是关于将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

C语言atof()函数:将字符串转换为double(双精度浮点数)

如何将具有十进制值的数字转换为PL / SQL中的浮点数?

如何将列表中的字符串值更改为 Python 中的浮点数

C语言atof()函数:将字符串转换为double(双精度浮点数)

无法将字符串转换为 pandas 中的浮点数(ValueError)

将混合类型 DF 列中的浮点数转换为字符串使用科学记数法