C语言保留浮点数小数点后几位数字,且不被四舍五入
记录
一个工程中有使用到,G1 E123.12355。.将E123.12355提取出来,与文件中进行比对。由于小数点后五位,在机器运算过程中会出现误差,小数点后第五位会有偏差,导致匹配不上。所以降低精度,改为匹配小数点后四位。
但是!
使用sprintf(szBuff,"E%.4f",PrintInfo.TargetPos[3]);
后发现,浮点数计算时,编译器会自动帮你进行四舍五入运算,但这并不是我想要的。
通过上述处理会得到:123.1236,与想要的结果123.1235有偏差。可以如下处理:
float E = 100.12356;
//保留小数点后三位
int temp = E*1000;
E = temp/1000.0f;
printf("%.3f\n",E);
输出结果是:100.123。并不会变成100.124;
封装成一个函数:
/*浮点数保留小数点后N bit,且不会被四舍五入*/
float conversion(float input,int potnum)
{
float result = pow(10.0,potnum);
int temp = input * result;
input = temp/result;
return input;
}
举例验证:
float nihao =100.12356;
nihao = conversion(nihao,4);
sprintf(oled,"E%.3f",nihao);
printf("nihao = %.3f\r\n",nihao);
printf("nihao = %.4f\r\n",nihao);
printf("nihao = %.5f\r\n",nihao);
输出结果:
nihao = 100.123
nihao = 100.1235
nihao = 100.12350
看到对你有用,点个赞再走,嘿嘿嘿