void float_to_string(char *str, float f, int precision) {
long p[] = {0,10,100,1000,10000,100000,1000000,10000000,100000000};
char *ptr = str;
char *p1;
char *p2;
unsigned long tmp;
// 处理负数
if (f < 0) {
*ptr++ = '-';
f = -f;
}
// 1. 处理整数部分
tmp = (unsigned long)f;
// 将整数部分转换为字符串并放入缓冲区
// 这里用一个简单的递归或循环来实现,为了简化,我们假设有一个整数转字符串的函数
// 或者直接用 sprintf 处理整数部分 (MicroLIB支持 %d)
ptr += sprintf(ptr, "%lu", tmp);
// 2. 处理小数部分
if (precision > 0) {
*ptr++ = '.'; // 添加小数点
// 计算小数部分
f -= (float)tmp;
tmp = roundf(f * p[precision]); // 四舍五入到指定精度
// 处理小数部分前导0的情况 (例如 0.05)
if (tmp < p[precision-1]) {
// 计算需要补多少个0
int leading_zeros = precision - 1;
unsigned long temp = tmp;
while (temp >= 10) {
temp /= 10;
leading_zeros--;
}
for(int i = 0; i < leading_zeros; i++) {
*ptr++ = '0';
}
}
// 将小数部分转换为字符串
ptr += sprintf(ptr, "%lu", tmp);
}
*ptr = '\0'; // 字符串结束符
}
|