c++ 怎么将字符串转化成double类型
将“12.23445”这种带小数点的字符串转换成double或float类型时结果不对,求解...
将“12.23445”这种带小数点的字符串转换成double 或float类型时结果不对,求解
展开
4个回答
展开全部
一、先首说明一点,由于double属于浮点类型,有精度限制,所以将字符串转为double类型,得到的数值可能为近似值。
二、程序思路:
1 首先假设字符串是合法的数据,即其中仅包含符号(+/-), 数字(0-9),和小数点。
如果包含符号,仅有一位,且位于第一位。
如果包含小数点,那么只能有一个。可以没有。
2 从起始位置开始检查,以小数点为分隔,整数部分和小数部分分别转换。
三、参考代码
double str2double(char *src)
{
double ret = 0,sign = 1;
char *p = src; //其实可以直接处理src, 但引用一个局部变量是一个很好的习惯
//处理符号位
if(*p == '+')sign = 1. p ++;
else if(*p == '-') sign = -1, p ++;
while(*p && (*p != '.'))//处理整数部分
{
ret*=10;
ret += (*p) - '0';//将字符转为数字并累计
p++;//移动指针
}
if(*p == '.')//存在小数的情况
{
double step = 0.1; //用来标识位数
p++; //略过小数点
while(*p)//处理小数部分,直到字符串结束
{
ret+=step*((*p)-'0');
step/=10;
p++;
}
}
return ret*sign; //不要忘记符号位
}
展开全部
这里printf中类型不对,改成:
printf("%lf\n",b);就可以了。
printf("%lf\n",b);就可以了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%lf\n",b);//不是%d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询