求浮点数转换成字符串,如何才能获得比较正确的字符串。
用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"
大致实现方法:
1、正常格式化浮点为字符
2、清除多余的占位零
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); } 运行结果比较满意,达到想要的效果: