#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
。
有没有办法在点后得到数字?
答案 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)
不幸的是,没有办法轻易做到这一点。每种解决方案都有其缺点。
直接使用atof()
或strtof()
:大多数人会告诉您这样做,大部分时间都可以使用。但是,如果程序设置了区域设置或者它使用了设置区域设置的库(例如,显示本地化菜单的图形库),并且用户将其区域设置设置为小数分隔符不是.
的语言(例如fr_FR
,其中分隔符为,
)这些函数将停止在.
进行解析,您将获得4.0
。
使用atof()
或strtof()
但更改区域设置;这是在致电setlocale(LC_ALL|~LC_NUMERIC, "");
或类似之前致电atof()
的问题。 setlocale
的问题在于它对流程是全局的,您可能会干扰程序的其余部分。请注意,您可以使用setlocale()
查询当前区域设置,并在完成后将其恢复。
编写自己的float解析例程。如果您不需要高级功能(如指数解析或十六进制浮点数),这可能会非常快。
另请注意,值4.08
不能完全表示为float;您将获得的实际值为4.0799999237060546875
。
答案 2 :(得分:17)
成功时,atof()函数将转换后的浮点数作为double值返回。 如果无法执行有效转换,则函数返回零(0.0)。 如果转换后的值超出可表示值的范围,则会导致 未定义的行为 。
Refrence:http://www.cplusplus.com/reference/cstdlib/atof/
试试这段代码:
#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);
}