abu*_*ker 48 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;
}
Run Code Online (Sandbox Code Playgroud)
我希望输出应该是4.08000000我得到的4.00000000.
有没有办法得到点后的数字?
Mys*_*ial 57
使用atof()或strtof()*代替:
printf("float value : %4.8f\n" ,atof(s));
printf("float value : %4.8f\n" ,strtof(s, NULL));
Run Code Online (Sandbox Code Playgroud)
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.
sam*_*var 28
不幸的是,没有办法轻易做到这一点.每种解决方案都有其缺点.
使用atof()或strtof()直接:这是大多数人会告诉你的事情,它大部分时间都可以使用.但是,如果程序设置了区域设置或者它使用了设置区域设置的库(例如,显示本地化菜单的图形库),并且用户将其区域设置设置为小数分隔符不在的语言.(例如fr_FR,分隔符是,)这些函数将停止解析,.你将得到4.0.
使用atof()或strtof()改变语言环境; 这是setlocale(LC_ALL|~LC_NUMERIC, "");在打电话atof()或喜欢之前打电话的问题.问题setlocale在于它将是整个流程的全局,您可能会干扰程序的其余部分.请注意,您可以查询当前区域设置,setlocale()并在完成后将其恢复.
编写自己的浮点解析例程.如果您不需要高级功能(如指数解析或十六进制浮点数),这可能会非常快.
另请注意,该值4.08不能完全表示为float; 你会得到的实际价值是4.0799999237060546875.
use*_*087 18
成功时,atof()函数将转换后的浮点数作为double值返回.如果无法执行有效转换,则函数返回零(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;
}
Run Code Online (Sandbox Code Playgroud)
您将获得以下输出:
Float value : 4.08000000
使用atof()
但这已被弃用,请使用它:
const char* flt = "4.0800";
float f;
sscanf(flt, "%f", &f);
Run Code Online (Sandbox Code Playgroud)
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
atof()0失败和转换时都会返回0.0,最好不要使用它。
| 归档时间: |
|
| 查看次数: |
165470 次 |
| 最近记录: |