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

C++ how to set a fixed decimal precision for a float

本文关键字:十进制 精度 设置 浮点数 c++      更新时间:2023-10-16

我有一个返回双精度的API调用。双精度体的十进制长度可以从许多位变化到几个位(这都取决于执行器的状态)。这个双表示执行器范围半径上的当前位置。我对这么详细的数字不感兴趣,因为它给系统增加了很多噪音。我一直在使用浮点数来节省空间,但我仍然有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。谁能帮帮我?

你就不能四舍五入吗

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

float和double的精度取决于硬件。其他的都需要用软件编码。

你可以尝试缩放,在int中工作:

-205
 -10
  30
  14
 141
 -17
  55
  36