【小折腾--C】字符串转浮点型
2015-09-21 14:57
344 查看
/**
* @brief: 从ptr开始扫描字符串,过滤到前面的空格,直到数字或者“+”、“-”号,
* 才开始转换。如果遇到非数字以及字符串结束符'\0'时,结束转换。
* ptr字符串包含,正负号、数字或者E(e)标示指数部分,如123.456或者123e-2
* @argument: _ptr,需要转换的字符串
* @return: 转换后的浮点型数
*/
double myatof(const char* _ptr)
{
double fVal = 0.0, fPower = 1.0;
if(!_ptr)
return fVal;
// 过滤空格
int i = 0;
for(; isspace(_ptr[i]); ++i);
// 处理+-
int nSign1 = (_ptr[i] == '-') ? -1 : 1;
if( (_ptr[i] == '+' ) || (_ptr[i] == '-') )
++i;
// 处理 小数点前
for(; isdigit( _ptr[i] ); ++i)
fVal = fVal * 10 + (_ptr[i] - '0');
// 处理 小数点
if(_ptr[i] == '.')
++i;
// 处理 小数点前
for(; isdigit( _ptr[i] ); ++i)
{
fPower *= 10;
fVal = fVal * 10 + (_ptr[i] - '0');
}
fVal = fVal / fPower;
// 处理e 指数
if((_ptr[i] == 'E') || (_ptr[i] == 'e') )
{
double fVal2 = 0.0;
int nSign2 = (_ptr[++i] == '-') ? -1 : 1;
if( (_ptr[i] == '+' ) || (_ptr[i] == '-') )
++i;
for(; isdigit( _ptr[i] ); ++i)
fVal2 = fVal2 * 10 + (_ptr[i] - '0');
if(nSign2 == 1)
fVal = fVal * pow(10, fVal2);
else
fVal = fVal / pow(10, fVal2);
}
return fVal;
}
* @brief: 从ptr开始扫描字符串,过滤到前面的空格,直到数字或者“+”、“-”号,
* 才开始转换。如果遇到非数字以及字符串结束符'\0'时,结束转换。
* ptr字符串包含,正负号、数字或者E(e)标示指数部分,如123.456或者123e-2
* @argument: _ptr,需要转换的字符串
* @return: 转换后的浮点型数
*/
double myatof(const char* _ptr)
{
double fVal = 0.0, fPower = 1.0;
if(!_ptr)
return fVal;
// 过滤空格
int i = 0;
for(; isspace(_ptr[i]); ++i);
// 处理+-
int nSign1 = (_ptr[i] == '-') ? -1 : 1;
if( (_ptr[i] == '+' ) || (_ptr[i] == '-') )
++i;
// 处理 小数点前
for(; isdigit( _ptr[i] ); ++i)
fVal = fVal * 10 + (_ptr[i] - '0');
// 处理 小数点
if(_ptr[i] == '.')
++i;
// 处理 小数点前
for(; isdigit( _ptr[i] ); ++i)
{
fPower *= 10;
fVal = fVal * 10 + (_ptr[i] - '0');
}
fVal = fVal / fPower;
// 处理e 指数
if((_ptr[i] == 'E') || (_ptr[i] == 'e') )
{
double fVal2 = 0.0;
int nSign2 = (_ptr[++i] == '-') ? -1 : 1;
if( (_ptr[i] == '+' ) || (_ptr[i] == '-') )
++i;
for(; isdigit( _ptr[i] ); ++i)
fVal2 = fVal2 * 10 + (_ptr[i] - '0');
if(nSign2 == 1)
fVal = fVal * pow(10, fVal2);
else
fVal = fVal / pow(10, fVal2);
}
return fVal;
}
相关文章推荐
- Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Security policy requir
- php op code 缓存 xcache
- doget 与dopost 的区别
- NHibernate从入门到精通系列(2)——NHibernate环境与结构体系
- mysql的安装配置
- git中reset与revert的使用
- Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示
- 谈谈我对sku的理解(3)----页面效果
- centos 6.5安装GitLab安装
- AndroidManifest简述
- RadioButton - android 自定义RadioButton样式
- scala学习笔记(十六) 类型参数与隐式转换
- JS显示循环输出的文字
- 谈谈我对sku的理解(3)----页面效果
- NHibernate从入门到精通系列(1)——NHibernate概括
- Android:储存方式之SharePreferences
- Android:实现数组之间的复制
- adt 支持html5
- Gson转换无限循环处理
- Hibernate-框架简述-1