我想你可以逃脱只是使用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