我有一个API调用,它返回一个双精度值。double的小数长度可以从多个小数位到几个小数位(这都取决于执行器的状态)。此双精度表示执行器范围半径上的当前位置。我对这样一个详细的数字不感兴趣,因为它会给系统增加很多噪音。我一直在使用浮点数来节省空间,但我仍然有6-8个小数长度的浮点数。我对floor或ceil不感兴趣,只是因为它不能完成我想要的工作。例如,我有以下数字:
-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有一个数值转换模板,但我不知道如何使用较低的精度从浮点型转换为浮点型。有人能帮帮忙吗?
发布于 2011-07-12 07:35:17
你就不能把它绕过去。
float round(float num, int precision)
{
return floorf(num * pow(10.0f,precision) + .5f)/pow(10.0f,precision);
}发布于 2011-07-12 07:32:10
float和double的精度取决于硬件。任何其他的东西都需要在软件中编码。
您可以尝试缩放,在int中工作:
-205
-10
30
14
141
-17
55
36https://stackoverflow.com/questions/6657858
复制相似问题