求浮点数转换成字符串,如何才能获得比较正确的字符串。
用printf("%f\n", (float)5); 这种方式转换出来的结果是 5.000000 ,末尾都会带6位小数。
实际想得到的结果
float string
---------------------------------
5 "5.0"
5.1 "5.1"
5.001 "5.001"
5.0000001 "5.0"
现在的结果(-_-!!)
float string
---------------------------------
5 "5.000000"
5.1 "5.100000"
5.001 "5.001000"
5.0000001 "5.000000"
用printf("%f\n", (float)5); 这种方式转换出来的结果是 5.000000 ,末尾都会带6位小数。
控制精度在6位,虽然控制精度在6位,但并不希望输出时后面出现多余0。
需要:
精度控制 6 位,剔除多余占位零。
printf和gcvt这两个函数多有些不太满足要求。
实际想得到的结果
float string
---------------------------------
5 "5.0"
5.1 "5.1"
5.001 "5.001"
5.0000001 "5.0"
现在的结果(-_-!!)
float string
---------------------------------
5 "5.000000"
5.1 "5.100000"
5.001 "5.001000"
5.0000001 "5.000000"
大致实现方法
char * float2str(float val, int precision, char *buf)
{
char *cur, *end;
sprintf(buf, "%.6f", val);
if (precision < 6) {
cur = buf + strlen(buf) - 1;
end = cur - 6 + precision;
while ((cur > end) && (*cur == '0')) {
*cur = '\0';
cur--;
}
}
return buf;
}
int main(int argc, char** argv)
{
char buf[128];
printf("%s\n", float2str((float)5, 2, buf));
printf("%s\n", float2str((float)5.1, 2, buf));
printf("%s\n", float2str((float)5.12, 2, buf));
printf("%s\n", float2str((float)5.123, 2, buf));
printf("%s\n", float2str((float)5.12345678, 2, buf));
return (EXIT_SUCCESS);
}
运行结果比较满意,达到想要的效果
非常感谢:qq120848369的帮助