字符串转成实数-atof

/* 
	字符串转成实数
	思路:先判断数据的正负,然后分二部分一部分正数,一部小数
*/

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

double myatof(char *str)
{
	/* 下的数据类型使用 double 精度更高,而使用 float 会有所差异,请自行验证 */
	char *pstr = str;
	double data = 0; /* 整数部分 */<span style="white-space:pre">	</span>
	double xs = 1.0; /* 小数部分 */
	double result = 1.0;
	int flag = 1;

	/* 判断,如果不符合转换的条件就返回 不太严密, 比如有 2 个小数点 。*/
	while (*str != '\0')
	{
		if ((*str > '9' || *str < '0') && *str != '.' && *str != '-' && *str != '+')
			return result;
		str++;
	}

	/* 先判断符号位,如果有符号位,则指指向前移动指向数据 */
	if (*pstr == '-')
	{
		flag = -1;
		pstr++;
	}
	if (*pstr == '+')
	{
		pstr++;
	}
	/* 计算出整数部分 */
	while (*pstr != '.')
	{
		data *= 10; 
		data += (*pstr - '0');
		pstr++;
	}
	pstr++;
	/* 计算小数部分 */
	while (*pstr != '\0')
	{
		xs /= 10;  /* 0.1  0.01  0.001 .... */
		data += xs*(*pstr - '0'); /* 累加小数 */
		pstr++;

	}

	result = data*flag;
	return result;
}


void main()
{
	char str[20] = "-1234.3456";
	float num1;
	double num2;
	//num1 = atof(str);
	//num2 = atof(str);
	num1 = myatof(str);
	num2 = myatof(str);
	printf("num1:%3f\nnum2:%3f\n", num1,num2);


	
	system("pause");
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值