修改double中的最低有效位(Java和C ++)

时间:2011-09-30 13:12:11

标签: java c++ double

如何在Java和C ++中将double的最低有效位设置为0?
在我的计算中,1699.3000000000002中的“... 002”是由数值误差引起的,所以我想将其消除。

2 个答案:

答案 0 :(得分:3)

我猜你实际上正在进行货币计算。在这种情况下,使用像double这样的二进制数据类型可能是导致问题的根本原因。切换到十进制类型,你应该能够解决这些问题。

答案 1 :(得分:2)

在Java中,1e-12*Math.rint(1e12*x)将舍入一个double并返回一个double作为结果。

在C ++中,您可以编写1e-12*floor(1e12*x + 0.5)

但请注意,如果10 12 x 恰好在两个整数之间,则这些行为会有所不同。 Java版本将向偶数转向,而C ++版本将向上舍入。