#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
.
有没有办法得到点后面的数字?
#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
.
有没有办法得到点后面的数字?
使用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。
不幸的是,没有办法轻易做到这一点。每个解决方案都有其缺点。
使用atof()
orstrtof()
直接:这是大多数人会告诉你做的事情,而且大部分时间它都会起作用。但是,如果程序设置了区域设置或它使用了设置区域设置的库(例如,显示本地化菜单的图形库)并且用户将其区域设置设置为没有小数点分隔符的语言(.
例如fr_FR
分隔符是,
) 这些函数将在 处停止解析,.
您仍然会得到4.0
。
使用atof()
或strtof()
更改语言环境;这是在打电话或喜欢setlocale(LC_ALL|~LC_NUMERIC, "");
之前打电话的问题。atof()
问题setlocale
在于它将是整个过程的全局,您可能会干扰程序的其余部分。请注意,您可以查询当前语言环境setlocale()
并在完成后恢复它。
编写自己的浮点解析例程。如果您不需要指数解析或十六进制浮点数等高级功能,这可能会非常快。
另外,请注意,该值4.08
不能完全表示为浮点数;您将获得的实际值为4.0799999237060546875
.
成功时,atof() 函数将转换后的浮点数作为双精度值返回。如果无法执行有效转换,则函数返回零 (0.0)。如果转换后的值超出双精度值的可表示值范围,则会导致未定义的行为。
参考: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
利用atof()
但这已被弃用,请改用:
const char* flt = "4.0800";
float f;
sscanf(flt, "%f", &f);
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
atof()
0
失败和转换都返回0.0
,最好不要使用它。
通过使用 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;
}
您想使用 atof() 函数。
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);
}