如何将字符串转换为浮点数?

时间:2011-10-31 07:42:07

标签: c floating-point type-conversion atof strtod

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

int main() 
{
    char s[100] ="4.0800" ; 

    printf("float value : %4.8f\n" ,(float) atoll(s)); 
    return 0; 
}

我希望输出应为4.08000000,而我只得到4.00000000

有没有办法在点后得到数字?

8 个答案:

答案 0 :(得分:55)

使用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获得atoll()的原因是因为它在找到第一个非数字时停止解析。

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

答案 1 :(得分:28)

不幸的是,没有办法轻易做到这一点。每种解决方案都有其缺点。

  1. 直接使用atof()strtof():大多数人会告诉您这样做,大部分时间都可以使用。但是,如果程序设置了区域设置或者它使用了设置区域设置的库(例如,显示本地化菜单的图形库),并且用户将其区域设置设置为小数分隔符不是.的语言(例如fr_FR,其中分隔符为,)这些函数将停止在.进行解析,您将获得4.0

  2. 使用atof()strtof()但更改区域设置;这是在致电setlocale(LC_ALL|~LC_NUMERIC, "");或类似之前致电atof()的问题。 setlocale的问题在于它对流程是全局的,您可能会干扰程序的其余部分。请注意,您可以使用setlocale()查询当前区域设置,并在完成后将其恢复。

  3. 编写自己的float解析例程。如果您不需要高级功能(如指数解析或十六进制浮点数),这可能会非常快。

  4. 另请注意,值4.08不能完全表示为float;您将获得的实际值为4.0799999237060546875

答案 2 :(得分:17)

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

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

Refrence: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

答案 3 :(得分:4)

使用atof()

但这已被弃用,请改用:

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

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

对于atof()失败和转换,

0都会返回0.0,最好不要使用它。

答案 4 :(得分:1)

通过使用sscanf,我们可以将字符串转换为float。

#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; 
}

答案 5 :(得分:0)

答案 6 :(得分:-2)

double x;

char *s;

s = " -2309.12E-15";

x = atof(s);     /* x = -2309.12E-15 */

printf("x = %4.4f\n",x);

答案 7 :(得分:-2)

Main()  {
    float rmvivek,arni,csc;
    char *c="1234.00";
    csc=atof(c);
    csc+=55;
    printf("the value is %f",csc);
}