2016-04-26 53 views
1

我想要獲取BigDecimal值中小數點後的位數。如何從java中的bigdecimal得到精確的十進制值

BigDecimal big = new BigDecimal(1231235612.45); 
    String[] str = big.toPlainString().split("\\."); 

    System.out.println(" Decimal Value: " + str[1]); 

使用此我得到下面的輸出 - 十進制值:4500000476837158203125。 Actualy我想顯示只有45根據原始BigDecimal值(1231235612.45)。 所以,我的預期輸出是十進制值:45。 但是,轉換時,它會在小數點後添加更多數字。 是否有任何方法或代碼從BigDecimal獲取完全相同的值?

+0

長話短說:使用'String'構造來代替。 – Tunaki

+0

最有可能你想'BigDecimal.valueOf(1231235612.45);''''或'new BigDecimal(「1231235612.45」);' –

回答

2

不要使用BigDecimal的double構造函數(請參閱Javadoc,它是不鼓勵的)。

使用String構造

new BigDecimal("1231235612.45"); 

或使用的MathContext

new BigDecimal(1231235612.45, MathContext.DECIMAL64); 
+2

@Nilesh不使用雙重構造函數的原因是1231235612.45被放入一個64位的double中,用有限的位數來表示它,數字1231235612.4500000476837158203125是最接近的。將該值更改一位會產生一個小於1231235612.45的數字,但不會像所示那樣接近。 – FredK

相關問題