一般web系统中,有关价钱的字段大多是用整数分表示(银行系统除外),有几个好处
1.后台运算直接数学表达式计算,没有BigDecimal看似简单但写起来麻烦的API
2.前后端交互保证没有小数,防止其他端口处理不当造成精度丢失(例如iOS)
3.....
但开发时免不了会遇到BigDecimal,前后端交互时又免不了会有多余的0出现,如3.00、6.60。
良好的后端接口规范应该是保证同一个字段无论是什么情况下,它返回的数据类型都是一样的(虽然有些语言是弱类型,还有Number对象)。所以我们既要去除多余的0,还要保证返回的字段都是BigDecimal类型。
public static BigDecimal bigDecimalStripZero(BigDecimal number) {
if (number == null) {
return BigDecimal.ZERO;
}
BigDecimal intNumber = BigDecimal.valueOf(number.intValue());
if (intNumber.compareTo(number) == 0) {
//整数
return intNumber;
}else {
//小数
String stringNumber = number.stripTrailingZeros().toPlainString();
return BigDecimal.valueOf(Double.valueOf(stringNumber));
}
}