动态控制浮点数小数位数
2020年7月29日
存在问题
C语言把浮点数直接通过sprintf函数保存在字符数组中,末尾的0显得很多余,想办法把末尾的0去掉。
解决问题
在打印时,通过格式控制输出,一般情况使用%f即可输出浮点数,我们通过 %.*f ,动态控制小数位,其中“ * ”控制小数位个数。下面直接上代码:
int CutFloatEndZero(float fVal, char* poutval)
{
int i;
int nCnt = 0;
int nlen = 0;
char abyVal[64];
sprintf(abyVal, "%f", fVal);
//printf("input fval to str : [%s]\n", abyVal);
nlen = strlen(abyVal);
//若最后一个字节不是0 直接返回
if (*(abyVal+nlen-1) != '0')
{
sprintf(poutval, "%f", fVal);
return 0;
}
//计算0的个数
for (i = nlen-1; i > 0; i--)
{
if (*(abyVal+i) == '0')
{
nCnt++;
}
else
{
break;
}
}
//printf("zero num : [%d]\n", nCnt);
//printf("output fval: [%.*f]\n", 6-nCnt, fVal);
//控制小数位
sprintf(poutval, "%.*f", 6-nCnt, fVal);
return 0;
}
代码中有两个参数,fVal为输入浮点数, poutval为去掉0后的输出字符串指针。需要的小伙伴直接调用该函数即可,欢迎补充。