如何只允许浮点数到两位小数

时间:2018-06-02 20:56:53

标签: c

例如,我有一个浮点数0.02344489282。我希望能够确保我拥有的每个浮点数都高达两个小数点:0.02。这将是不精确的,我敢肯定,但我的代码中的整个浮点数应该能够截断两位小数后的任何内容。我已经在Stack Overflow上看到了其他相关的帖子,但他们处理的是将小数输出到两点。

目标:以牺牲准确性为代价优化内存消耗。但准确度可降至5-15%。

实际例子:我正在执行卡尔曼滤波器。我试图通过缩短变量的位宽来找到近似值,而不是噪声和实际值的精确值。然后我会发现前一个脚本和后一个脚本的准确性差异以及节省了多少能量和内存。

2 个答案:

答案 0 :(得分:1)

两种可能的解决方案:

  1. 使用表示1/100单位的整数。
  2. 使用浮点数,但只使用0.25的整数倍数(即以.25,。50,。75或.00结尾的数字),因为这些是唯一只有两位小数的浮点数。
  3. 由于选项2几乎肯定不是您真正想要的,所以请选择1.

答案 1 :(得分:-1)

你可以将float乘以100,转换为int,转换回float,然后除以100.

#include <stdio.h>
int main()
{
  float a = 0.02344489282; // original number with too many digits
  int b = a * 100;         // shift decimal point by two places, then truncate
  a = b / 100.0;           // shift decimal point back, then assign back to a
  printf("%f\n", a);       // print number with two (potentially non-zero) digits after decimal point
  return 0;
}

$ ./a.out 
0.020000