我想你可以逃脫只是使用toPlainString()的返回的BigDecimal。
簡單的測試程序:
BigDecimal[] bds={new BigDecimal("1.0"),new BigDecimal("20.50"),
new BigDecimal("13.25"),
new BigDecimal("30.0"),
new BigDecimal("30.01000"), new BigDecimal("0.0000")
};
for (BigDecimal bd: bds)
System.out.println(bd+"==>"+bd.stripTrailingZeros().toPlainString());
回報:
1.0==>1
20.50==>20.5
13.25==>13.25
30.0==>30
30.01000==>30.01
0.0000==>0.0000
只有一個邊界的情況下,我知道,這是行不通的for..and是0所有變體。
0.0 => 0.0
0.00 => 0.00
我相信這是在這個堆棧溢出文章:Why does new BigDecimal("0.0").stripTrailingZeros() have a scale of 1? 按照這篇文章,這是在java 8中更正(但我還沒有測試過)。
你可以做的compareTo(BigDecimal.ZERO)== 0,在這種情況下使用BigDecimal.ZERO擺脫它。
BigDecimal[] bds={new BigDecimal("1.0"),
new BigDecimal("20.50"),
new BigDecimal("13.25"),
new BigDecimal("30.0"),
new BigDecimal("30.01000"),
new BigDecimal("0.0000")
};
for (BigDecimal bd: bds){
if (bd.compareTo(BigDecimal.ZERO) == 0){
System.out.println(bd+"=>"+BigDecimal.ZERO);
}
else {
System.out.println(bd+"==>"+bd.stripTrailingZeros().toPlainString());
}
回報:
1.0==>1
20.50==>20.5
13.25==>13.25
30.0==>30
30.01000==>30.01
0.0000=>0
感謝您的回答,但我不希望重寫序列化。我想知道是否有一些方法可以在服務器或用戶界面上對其進行格式化。 – AlexSmith 2014-12-07 14:06:32
@AlexSmith它不是重寫序列化,它覆蓋了框架上的轉換策略。 – Kleyguerth 2014-12-07 15:10:39