我是靠谱客的博主 安静水池,最近开发中收集的这篇文章主要介绍double类型小数转换为char*类型字符串第一版第二版第三版,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一版

/*
*********************************************************************************************************
*	函 数 名: FloatToStr
*	功能说明: 将一个浮点型数字转换为一个字符串
*	形    参: 1. x:要转换的数字
			  2. str:转换后得到的字符串  //注意不要传入char*
			  3. len:字符串的长度(算上符号位和截至符)	//最好不要超过12
*	返 回 值: 无
*********************************************************************************************************
*/
void FloatToStr(float slope, unsigned char str[], int len)
{
	int temp, i, j;
	int flag = 1;

	if (slope < 0)			//判断是否小于0	
	{
		str[0] = '-';	//小于0则加上负号
		slope = -slope;	
		flag = 0;			//字符串中每位依次后移
	}

	temp = (int)slope;          //取整数部分
	for (i = 0; temp != 0; i++)	//计算整数部分的位数
	{
		temp /= 10;
	}

	temp = (int)slope;
	for (j = i; j > 0; j--)			//将整数部分转换成字符串型
	{
		str[j - flag] = temp % 10 + '0';
		temp /= 10;
	}

	str[i + 1 - flag] = '.';
	slope -= (int)slope;
	for (i = i + 2; i < len - 1; i++)//将小数部分转换成字符串型
	{
		slope *= 10;
		str[i - flag] = (int)slope + '0';
		slope -= (int)slope;
	}
	str[len - 1 - flag] = '';
}

第二版

  1. 修改实现逻辑,增强程序的健壮性
  2. 修改最后一个形参的含义,用起来更简单
/*
*********************************************************************************************************
*	函 数 名: FloatToStr
*	功能说明: 将一个浮点型数字转换为一个字符串
*	形    参:1. x:要转换的数字
			  2. str:转换后得到的字符串  //注意不要传入char*
			  3. len:小数点后的位数
*	返 回 值: 无
*********************************************************************************************************
*/
void FloatToStr(float slope, unsigned char str[],int len)
{
	int t;
	unsigned char* ptr, buf[5];		//可以通过增大buf来支持多位数的转换
	int i;

	ptr = str;
	if (slope < 0)	//当数值小于0时,加上负号
	{
		*ptr++ = '-';
		slope = -slope;
	}
	if (slope < 1)	//当数值小于1时,加上0
	{
		*ptr++ = '0';
	}
	int temp = slope;	//提取整数部分
	i = 0;
	while (temp > 0)
	{
		t = temp % 10;
		temp = temp / 10;
		buf[i++] = t + 0x30; // 通过计算把数字编成ASCII码形式  
	}
	i--;
	for (; i >= 0; i--)		// 将得到的字符串倒序  
	{
		*(ptr++) = buf[i];
	}
	*(ptr++) = '.';			//小数点
	temp = slope;			//提取整数部分
	slope= slope - temp;	//得到小数部分
	slope *= (pow(10,len));	//小数部分转换为整数
	temp = slope;			
	//赋值小数部分
	i = 0;
	while (temp > 0)
	{
		t = temp % 10;
		temp = temp / 10;
		buf[i++] = t + 0x30; // 通过计算把数字编成ASCII码形式  
	}
	i--;
	for (; i >= 0; i--)   // 将得到的字符串倒序  
	{
		*(ptr++) = buf[i];
	}
}

第三版

将之前的float型数据改为double型数据,在传递时拥有了更高的精度,事实上我们并不希望该函数为我们进行任何数据上的修改,使用double型数据传递可以最大限度的保证我们数据的完整性。同时也兼容float型数据的传递

/*
*********************************************************************************************************
*	函 数 名: DoubleToStr
*	功能说明: 将一个浮点型数字转换为一个字符串		//传入的数字也可以是Float型数据
*	形    参:1. x:要转换的数字
			  2. str:转换后得到的字符串  //注意不要传入char*
			  3. len:小数点后的位数
*	返 回 值: 无
*********************************************************************************************************
*/
void DoubleToStr(double slope, unsigned char str[],int len)
{
	int t, i;
	int flag = 0;	//补足小数点后0的个数
	unsigned char* ptr, buf[5] = { '' };		//可以通过增大buf来支持多位数的转换

	ptr = str;
	if (slope < 0)	//当数值小于0时,加上负号
	{
		*ptr++ = '-';
		slope = -slope;
	}
	if (slope < 1)	//当数值小于1时,加上0
	{
		*ptr++ = '0';
	}
	int temp = slope;	//提取整数部分
	i = 0;
	//赋值整数部分
	while (temp > 0)
	{
		t = temp % 10;
		temp = temp / 10;
		buf[i++] = t + 0x30; // 通过计算把数字编成ASCII码形式  
	}
	i--;
	for (; i >= 0; i--)		// 将得到的字符串倒序  
	{
		*(ptr++) = buf[i];
	}
	*(ptr++) = '.';			//小数点
	temp = slope;			//提取整数部分
	slope= slope - temp;	//得到小数部分
	slope *= (pow(10,len));	//小数部分放大
	temp = slope;			//提取整数部分
	//补足小数点后的0		//如007,强制转换后会变为7,失去了两个0
	while (len)				//标记失去的0的个数
	{
		len--;
		if (temp < pow(10,len))
			flag++;
	}
	while (flag--)			//在字符串中补足0
	{
		*(ptr++) = '0';
	}			
	//赋值小数部分
	i = 0;
	while (temp > 0)
	{
		t = temp % 10;
		temp = temp / 10;
		buf[i++] = t + 0x30; // 通过计算把数字编成ASCII码形式  
	}
	i--;
	for (; i >= 0; i--)   // 将得到的字符串倒序  
	{
		*(ptr++) = buf[i];
	}
}

最后

以上就是安静水池为你收集整理的double类型小数转换为char*类型字符串第一版第二版第三版的全部内容,希望文章能够帮你解决double类型小数转换为char*类型字符串第一版第二版第三版所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部