第一版
/*
*********************************************************************************************************
* 函 数 名: 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] = '\0';
}
第二版
- 修改实现逻辑,增强程序的健壮性
- 修改最后一个形参的含义,用起来更简单
/*
*********************************************************************************************************
* 函 数 名: 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] = { '\0' }; //可以通过增大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];
}
}