更新:有了這些混合要求(即小數點後至少2個數字應顯示,但多達必要)不平凡實現,但你可以接近:
結合stripTrailingZeros()
與DecimalFormat
以獲得所需的行爲(或接近):
DecimalFormat df = new DecimalFormat("0.00########")
String formatted = df.format(bigDecimal.stripTrailingZeros())
這將格式化任何BigDecimal
值,小數點後至少2位數字,小數點後最多10位數字,如果它提高了精度。
BigDecimal
與更比小數點後10個位數的值仍然會被切斷:
input | output
-----------------+----------
1.20000 | 1.20
1.23000 | 1.23
1.2301 | 1.2301
1.230001000 | 1.230001
1.2300000000001 | 1.23
原來的答覆:
如果你總是希望有確切2數字後的逗號,並知道你不會失去這種精度,那麼你可以撥打setScale(2, RoundingMode.UNNECESSARY)
:
System.out.println(new BigDecimal("1.23000").setScale(2, RoundingMode.UNNECESSARY));
此代碼將打印1.23
。請注意,如果需要四捨五入,這將產生一個ArithmeticException
(即前兩位數字不爲零後的任何值)。
如果你的價值觀可以有較高的精度,要應用某些圓整,只需用the appropriate value替換RoundingMode.UNNECESSARY
:
System.out.println(new BigDecimal("1.2301").setScale(2, RoundingMode.CEILING));
這將打印1.24
。
如果你不知道數字的確切人數,但要儘量少(即你想要儘可能小scale
您BigDecimal
)然後調用stripTrailingZeros()
會做你想要什麼:
System.out.println(new BigDecimal("1.230001000").stripTrailingZeros();
這將打印1.230001
。
注意到你原來的那些新的要求相沖突:如何'1.230223000'變成'1.230223',但'1.0000'應打印'1.00'? – 2011-05-30 13:05:33
不,他們不是約阿希姆。再讀一遍。我想忽略小數點後的前兩個零來進行修整。而輸入將永遠是至少x.xx類型 – geoaxis 2011-05-30 13:52:08
是的,我意識到後,我發表了我的評論。我的(更新的)答案有幫助嗎? – 2011-05-30 13:52:56