double类型最多支持16位有效数字,且最大值只支持10^308次方,大一点的数字会变为科学计数法,小数精度不够等有一系列不方便的问题;
引进BigDecimal解决此类麻烦,弊端,BigDecimal没有double使用方便;具体如下;
警告警告!!!--> BigDecimal保留小数精度时,比较靠谱,但是当值小于1大于0的时候,保留位数大于6位就会变成科学计数法,解决办法-toPlainString()代替toString()
创建对象,推荐
public BigDecimal(String val)
而不推荐
public BigDecimal(double val),会出现0.00=0
基本操作:
加:add(BigDecima)
减:subtract(BigDecimal)
乘:multiply(BigDecimal)
除:divide(BigDecimal)
乘方:pow(int)
取绝对值:abs()
取反:negate()
对比:compareTo(BigDecimal)
设置小数点精确度:setScale(int)
不使用科学计数法:toPlainString()
设置保留小数点精确度并添加保留方式(直接加1或者四舍五入):setScale(int, int)
/** * 转小数,保留2位 * @param num * @return */ public static BigDecimal StrTo2Double(String num) { return new BigDecimal(num).setScale(2, java.math.BigDecimal.ROUND_HALF_UP); }
/** * 格式化8位小数 * @param num * @return */ public static String format8(BigDecimal num) { if (num == null) return "0.00000000"; return num.setScale(8, java.math.BigDecimal.ROUND_HALF_UP).toPlainString(); }
/** * 是否比0大 * num > 0 * @return */ public static boolean biggerThan0(BigDecimal num) { if (0 < num.compareTo(new BigDecimal(0))) return true; return false; }