c++ 怎么将字符串转化成double类型

将“12.23445”这种带小数点的字符串转换成double或float类型时结果不对,求解... 将“12.23445”这种带小数点的字符串转换成double 或float类型时结果不对,求解 展开
 我来答
风若远去何人留
推荐于2016-02-22 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部

一、先首说明一点,由于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; //不要忘记符号位
}
freeeeeewind
推荐于2018-02-28 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1356万
展开全部
#include<time.h>
#include <iostream>
#include<string>
#include<stdlib.h>
using namespace std;
void main()
{
string  a ="123.455";
double b = atof(a.c_str());
printf("%d\n", (int)b);  // <--注意这句!!
}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
songhai911
2014-05-12 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:69.6万
展开全部
这里printf中类型不对,改成:
printf("%lf\n",b);就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-05-12 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1070万
展开全部
printf("%lf\n",b);//不是%d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式