BigDecimal去除多余的0

857 阅读1分钟

   一般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));    
    }
}