2014-01-26 37 views
2

我正在構建使用貨幣換算器並將BigDecimal金額轉發給其他服務的服務。有時,轉換率使轉換後的數量接近小數點後34位,這是下游服務不接受的。如何截斷BigDecimal中的額外小數

有沒有簡單的截斷(不是圓的)BigDecimal的方法。所以,例如,如果轉換的數量是1.23456789,我不想要1.24,也不是1.3,也不是1.20,或者任何類型的東西。我只是想擺脫出現在4之後的小數。所以我想要的是1.23。

我看到很多與此有關的問題,但他們都以某種方式取整了BigDecimal。

謝謝!

回答

6

RoundingMode.DOWN有效地截斷你的十進制值:

的Javadoc說:

入模式向零舍入。切勿將 之前的數字增加到捨棄分數(即截斷)。請注意,這個四捨五入的 模式決不會增加計算值的大小。

BigDecimal dec = new BigDecimal(10.2384235254634623524); 
System.out.println(dec.setScale(2, RoundingMode.DOWN)); 

會給:

10.23 
+0

是,DOWN似乎在這種情況下更好。由於FLOOR會使-1.5041變成-1.51,從而改變我不想要的前兩個小數位。謝謝。 – Shobit

+0

是的,它也與它的文檔一致 – PopoFibo

4

的BigDecimal提供的RoundingMode,你需要在這裏RoundingMode.FLOOR,

System.out.println(new BigDecimal("1.234567").setScale(2, RoundingMode.FLOOR)); // 1.23 
System.out.println(new BigDecimal("1.236567").setScale(2, RoundingMode.FLOOR)); // 1.23 
0

BigDecimal還提供Rounding Modes。試試這個

BigDecimal bd = new BigDecimal(2.2964556655); 
System.out.println(bd.setScale(2,BigDecimal.ROUND_DOWN)); 
1

你可以嘗試處理它像一個字符串

System.out.println(new DecimalFormat("#0.##").format(new BigDecimal("1.23456789")));