如何将string转换为浮动?

#include<stdio.h> #include<string.h> int main() { char s[100] ="4.0800" ; printf("float value : %4.8f\n" ,(float) atoll(s)); return 0; } 

我预计输出应该是:40.8万,而我只有4.00000000

有没有办法让点后的数字

使用atof()strtof() *代替:

 printf("float value : %4.8f\n" ,atof(s)); printf("float value : %4.8f\n" ,strtof(s, NULL)); 

http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
http://www.cplusplus.com/reference/cstdlib/strtof/

  • atoll()是为了整数。
  • atof() / strtof()用于浮点数。

你只有4.00的原因是因为当它find第一个非数字时停止parsing。

*注意strtof()需要C99或C ++ 11。

不幸的是,没有办法轻松做到这一点。 每个解决scheme都有其缺点。

  1. 直接使用atof()strtof() :这是大多数人告诉你要做的事情,大部分时间都是这样。 但是,如果程序设置语言环境,或者它使用设置语言环境的库(例如,显示本地化菜单的graphics库),并且用户将其语言环境设置为小数点分隔符不是的语言. (如fr_FR分隔符所在的位置),这些函数将停止parsing. 你会得到4.0

  2. 使用atof()strtof()但改变语言环境; 这是一个调用setlocale(LC_ALL|~LC_NUMERIC, ""); 之前任何电话atof()或类似的。 setlocale的问题是这个过程是全局的,你可能会干扰程序的其他部分。 请注意,您可以使用setlocale()查询当前的语言环境,并在完成后恢复它。

  3. 编写你自己的浮点parsing例程。 如果您不需要高级function(如指数parsing或hex浮点数),这可能会相当快。

另外请注意, 4.08值不能完全表示为浮点数。 你将得到的实际价值是4.0799999237060546875

为什么不应该使用函数atof()将string转换为double?

成功时,atof()函数将转换后的浮点数作为double值返回。 如果不能执行有效的转换,则函数返回零(0.0)。 如果转换后的值超出可表示值的范围,则会导致未定义的行为

参考: http ://www.cplusplus.com/reference/cstdlib/atof/

相反,使用函数strtod() ,它更健壮。

试试这个代码:

 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char s[100] = "4.0800"; printf("Float value : %4.8f\n",strtod(s,NULL)); return 0; } 

您将得到以下输出:

Float value : 4.08000000

使用atof()

但是,这是不赞成使用,而不是:

 const char* flt = "4.0800"; float f; sscanf(flt, "%f", &f); 

http://www.cplusplus.com/reference/clibrary/cstdlib/atof/

atof()对于失败和0.0转换返回0 ,最好不要使用它。

 double x; char *s; s = " -2309.12E-15"; x = atof(s); /* x = -2309.12E-15 */ printf("x = %4.4f\n",x); 
 Main() { float rmvivek,arni,csc; char *c="1234.00"; csc=atof(c); csc+=55; printf("the value is %f",csc); } 

通过使用sscanf,我们可以将string转换为浮点数。

 #include<stdio.h> #include<string.h> int main() { char str[100] ="4.0800" ; const char s[2] = "-"; char *token; double x; /* get the first token */ token = strtok(str, s); sscanf(token,"%f",&x); printf( " %f",x ); return 0; }