C ++如何为float设置固定的小数精度

时间:2011-07-11 23:23:05

标签: c++ boost rounding numeric-conversion

我有一个API调用,返回一个double。双倍的十进制长度可以从许多小数位变化到几个(这一切都归结为执行器的状态)。该双倍表示致动器的范围半径上的当前位置。 我对这样一个详细的数字不感兴趣,因为它给系统增加了很多噪音。 我一直在使用花车来节省空间,但我仍然有6-8位小数的花车。 我对地板或天花板不感兴趣,仅仅因为它不能完成我想要的工作。 例如,我有数字:

-2.05176
-0.104545
 0.30643
 0.140237
 1.41205
-0.176715
 0.559462
 0.364928

我想将精度设置为2位小数,无论如何。 我不是在谈论std :: cout的输出精度,我知道如何设置它。我在谈论浮子的实际精度。即:我对具有0.XX格式和0.XX00000000000实际精度的浮点数感兴趣。 因此将上面的列表转换为:

-2.05
-0.10
 0.30
 0.14
 1.41
-0.17
 0.55
 0.36

我知道boost有一个数值转换模板,但我无法弄清楚如何使用较低的精度从float转换为float。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

你能不能绕过它。

float round(float num, int precision)
{
    return floorf(num * pow(10.0f,precision) + .5f)/pow(10.0f,precision);
}

答案 1 :(得分:2)

float和double的精度下降到硬件。其他任何东西都需要用软件编码。

您可以尝试缩放,使用ints:

-205
 -10
  30
  14
 141
 -17
  55
  36