C语言中字符串转换浮点数的问题
来源:互联网 发布:淘宝男鞋店铺哪家好 编辑:程序博客网 时间:2024/05/17 02:48
在C语言的标准库中,提供了atof,strtod等将字符串转换为double类型的函数。
假设 char *str为一个需要转换的字串,则我们可以这样使用:
double dval;
dval = atof(str);
dval = strtod(str, 0);
我们还可以使用 sscanf来进行装换:
sscanf(str, “%lf”, &dval);
但是,在上面的转换中,我们忽略了一个问题:怎样判断是否转换成功?这里我给出了一个解决方法。
这里的程序代码包括两个文件:str2double.h及 strdouble.c,可以将这个实用函数添加到实用函数库里。
str2double.h
# ifndef str2double_h
# define str2double_h
# ifdef hpux
# define str2double(str) strtod(str, 0);
# else
extern double str2double(cons char *str);
# endif
# endif /* end of <ifndef str2double_h> */
str2double.c
# ifndef hpux
# include “str2double.h”
# include <math.h>
# include <errno.h>
double str2double(const char *str)
{
double rval; /* return value */
char *p;
rval = strtod(str, &p);
if ( str == p ) /* convertion failed */
errno = EINVAL;
else if ( isnan(rval) || isinf(rval) )
errno = ERANGE;
return rval;
}
# endif /* end of <ifndef hpux> */
这里,以HP UNIX 的strtod的实现为标准,写了str2double的函数。具体的可以这样使用:
# include “str2double.h”
errno = 0;
dval = str2double(str);
if ( errno != 0 )
{
转换失败;
}
事前errno的清零是必须的,否则,它的值有可能是前面的调用带来的值。
有人说,使用sscanf也可以判断转换结果:
if ( sscanf(str, “%lf”, &dval) != 1 )
{
转换失败;
}
但对于出界的转换 (isnan, isinf), sscanf是判断不出错误的。
- C语言中字符串转换浮点数的问题
- C语言 字符串的浮点数转换成浮点数
- [c]字符串、浮点数转换
- 自己动手写C语言浮点数转换字符串函数
- 浮点数转换成字符串(c语言)
- C语言中浮点数的比较
- c语言中浮点数的陷阱
- C语言中浮点数的运算
- C/C++中如何将浮点数转换为字符串
- 【C语言】将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- C语言 编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- 【c语言】编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- 【C语言】编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- C语言 将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数 函数原型:double my_atof(char *str)
- 用c语言实现 编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- C语言浮点数和整数转换的分析
- C++ 字符串转换为浮点数时的精度问题
- C语言中字符串与整型,浮点型之间的转换
- OSPF详解(四):邻居关系、邻接关系、泛洪
- web.py step by step (2)
- 学C++时要注意的
- .NET 部署问题之完美解决方案总结(访问IIS元数据库失败,找不到页面,应用程序错误解决)
- Javascript变量问题
- C语言中字符串转换浮点数的问题
- 输入法-Ubuntu手记之系统配置
- 实现 手机端和服务器端的数据同步技术
- 三种实现Ubuntu QQ
- csdn的专业资料很多啊
- [双语阅读]法国旅行社:给阳光上保险
- CMMB收费、直播星免费都是战略失误
- [双语阅读]现实版“哈利•波特”无女友 桃花不开
- 第一篇