2014-02-10 76 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

相關問題