请考虑以下代码:
0.1 + 0.2 == 0.3 -> false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2 -> 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些不准确之处?
我有一个API调用,它返回一个double。双精度数的十进制长度可以从很多小数位到几个小数位不等(全部归结为执行器的状态)。此双精度表示执行器范围半径上的当前位置。我对这样的详细数字不感兴趣,因为它会给系统增加很多噪音。我一直在使用浮点数来节省空间,但仍然有6-8十进制长度的浮点数。我对地板或天花板不感兴趣,只是因为它不能完成我想要的工作。例如,我有数字:
-2.05176
-0.104545
0.30643
0.140237
1.41205
-0.176715
0.559462
0.364928
Run Code Online (Sandbox Code Playgroud)
无论如何,我都希望将精度设置为2个小数位。我不是在谈论std :: cout的输出精度,我知道如何设置它。我说的是浮子的实际精度。即:我对浮点数感兴趣,这些浮点数将具有0.XX格式和0.XX00000000000的实际精度。因此,将上面的列表转换为:
-2.05
-0.10
0.30
0.14
1.41
-0.17
0.55
0.36
Run Code Online (Sandbox Code Playgroud)
我知道boost有一个数值转换模板,但是我不知道如何使用较低的精度从float转换为float。有人可以帮忙吗?