59
#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.

有没有办法得到点后面的数字?

4

8 回答 8

67

使用atof()or 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。

于 2011-10-31T07:43:53.390 回答
32

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

  1. 使用atof()orstrtof()直接:这是大多数人会告诉你做的事情,而且大部分时间它都会起作用。但是,如果程序设置了区域设置或它使用了设置区域设置的库(例如,显示本地化菜单的图形库)并且用户将其区域设置设置为没有小数点分隔符的语言(.例如fr_FR分隔符是,) 这些函数将在 处停止解析,.您仍然会得到4.0

  2. 使用atof()strtof()更改语言环境;这是在打电话或喜欢setlocale(LC_ALL|~LC_NUMERIC, "");之前打电话的问题。atof()问题setlocale在于它将是整个过程的全局,您可能会干扰程序的其余部分。请注意,您可以查询当前语言环境setlocale()并在完成后恢复它。

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

另外,请注意,该值4.08不能完全表示为浮点数;您将获得的实际值为4.0799999237060546875.

于 2011-10-31T07:57:56.897 回答
23

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

成功时,atof() 函数将转换后的浮点数作为双精度值返回。如果无法执行有效转换,则函数返回零 (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

于 2014-07-31T12:14:31.273 回答
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,最好不要使用它。

于 2011-10-31T07:45:43.970 回答
1

通过使用 sscanf 我们可以将字符串转换为浮点数。

#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; 
}
于 2017-01-05T05:05:53.167 回答
0

您想使用 atof() 函数。

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

于 2011-10-31T07:44:16.790 回答
-1
double x;

char *s;

s = " -2309.12E-15";

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

printf("x = %4.4f\n",x);
于 2013-05-28T21:48:15.540 回答
-2
Main()  {
    float rmvivek,arni,csc;
    char *c="1234.00";
    csc=atof(c);
    csc+=55;
    printf("the value is %f",csc);
}
于 2014-12-12T16:35:56.827 回答