如何在Java和C ++中将double的最低有效位设置为0?
在我的计算中,1699.3000000000002中的“... 002”是由数值误差引起的,所以我想将其消除。
答案 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 ++版本将向上舍入。