C++ C++;如何为浮点设置固定的十进制精度

C++ C++;如何为浮点设置固定的十进制精度,c++,boost,rounding,numeric-conversion,C++,Boost,Rounding,Numeric Conversion,我有一个API调用,它返回一个double。double的十进制长度可以从许多小数位变为几个小数位(这一切都取决于执行器的状态)。此双精度表示执行器范围半径上的当前位置。 我对这样一个详细的数字不感兴趣,因为它给系统增加了很多噪音。 我一直在使用浮点数来节省空间,但仍然有6-8个十进制长度的浮点数。 我对地板或天花板不感兴趣,只是因为它不能完成我想要的工作。 例如,我有以下数字: -2.05176 -0.104545 0.30643 0.140237 1.41205 -0.176715

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

-2.05176
-0.104545
 0.30643
 0.140237
 1.41205
-0.176715
 0.559462
 0.364928
我希望精度设置为小数点后2位。 我不是说std::cout上的输出精度,我知道如何设置。我说的是浮子的实际精度。i、 e:我对0.XX格式和0.XX00000000000实际精度的浮动感兴趣。 因此,将上述列表转换为:

-2.05
-0.10
 0.30
 0.14
 1.41
-0.17
 0.55
 0.36

我知道boost有一个数字转换模板,但我不知道如何使用较低的精度将浮点转换为浮点。有人能帮忙吗?

浮点和双精度取决于硬件。其他任何东西都需要用软件编码

您可以尝试使用整数进行缩放:

-205
 -10
  30
  14
 141
 -17
  55
  36

你就不能绕过去吗

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

我曾经考虑过缩放,但它也不够精确。例如,如果一个执行器的范围是-1.50到3.50,我只需要两个十进制范围,更多的只是增加噪音,更少的是泛化太多。这太有趣了。浮点数的精度由实现固定。如果需要精确值,请使用整数。否则,在打印时,您应该将值四舍五入,并且输出函数内置了此功能。我不知道您刚才说了什么。想解释一下吗?正如我所说,我对打印值不感兴趣,而是将它们四舍五入到2点精度并进行比较。