我认为你可以在返回的 bigdecimal 上使用 toPlainString()。
简单的测试程序:
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
我知道只有一种边界情况不起作用..这是 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