2014-02-10 80 views
1

我使用BigDecimal来处理我的应用程序中的正数,并且我想在第四个之后使小数截断。 我似乎几乎找到了我想要的RoundingMode.DOWN,但是在BigDecimal从double创建时存在一些问题。使BigDecimal截断,而不是一轮

例如:

System.out.println("123.11119 = " + new BigDecimal("123.11119").setScale(4, RoundingMode.DOWN)); //Print 123.1111 which is exactly what I want 
System.out.println("123.1111 = " + new BigDecimal("123.1111").setScale(4, RoundingMode.DOWN)); //So does this one 

但是,下面的打印123.1110这是不是我想要的一切:

System.out.println("123.1111 = " + new BigDecimal(123.1111d).setScale(4, RoundingMode.DOWN)); 
+5

问题是'123.1111d'可能被存储为'123.111099999999',从而导致你的问题。 –

+0

是的。这是我怀疑的。有没有办法解决这个问题? – 0x56794E

+3

是的。不要从双打创建BigDecimals。 –

回答

4

这是因为表现问题。

现实中的值123.1111d可以是类似123.111091231918498的东西。

这就是为什么当你想要具有确切的值时建议使用字符串构造函数。

+1

好的。我会接受你的答案,我想解决方案是“不要使用双重构造函数”! – 0x56794E

相关问题