# BigDeciaml
# 加
add
# 减
subtract
# 乘
multiply
# 除
// MathContext mc = new MathContext(8, RoundingMode.HALF_DOWN); MathContext mc = MathContext.DECIMAL32;
divide(number, mc); 结果为无限小数时,会报错,所以加上mc精确为8位小数
# 零
BigDecimal.ZERO
# setScale();用于格式化小数点
setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
# .signum(); 判断与0的大小关系
返回-1,说明小于0;
返回0,说明等于0;
返回1,说明大于0
# a.compareTo(b); 判断两个值的大小关系
返回-1,说明a小于b;
返回0,说明a等于b;
返回1,说明a大于b
# 执行顺序
从前到后依次执行
new BigDecimal("3").subtract(new BigDecimal("2")).pow(2); //结果为1 new BigDecimal("3").multiply(new BigDecimal("2")).pow(2); //结果为36
# 去掉小数点后面的0
.stripTrailingZeros()
# 防止数字自动转化成科学计数法形式
BigDecimal数据大于9999999时,就会自动转换为科学计数法。 toPlainString()
# 保留有效位数和小数点位数
BigDecimal a = new BigDecimal("0.01234"); BigDecimal b = a.setScale(3,RoundingMode.HALF_EVEN);// 0.012 设置保留小数点后3位 BigDecimal c = a.round(new MathContext(3, RoundingMode.HALF_EVEN)); // 0.0123 保留3位有效位数
BigDecimal d = new BigDecimal("1234"); BigDecimal e = d.round(new MathContext(3, RoundingMode.HALF_EVEN)); // 1.23E+3 保留3位有效位数
# 保留2位有效位数,并且后面补0
DecimalFormat decimalFormat = new DecimalFormat("0.000");
BigDecimal a = new BigDecimal("1");
BigDecimal a1 = new BigDecimal(decimalFormat.format(a));
BigDecimal aa = a1.round(new MathContext(2, RoundingMode.HALF_EVEN)); // 1.0
# ulp()
返回末尾的计数单位 new BigDecimal("123").ulp(); // 1 new BigDecimal("1.2").ulp(); // 0.1 new BigDecimal("1.20").ulp(); // 0.01
# 绝对值
new BigDeciaml("-1").abs(); // 1
# 判断字符串是否可转换成数值
如果可以解析为数字,则返回true,否则返回false
NumberUtils.isParsable(a);
缺点:不能识别指数方式(不建议用)
String b = "4.25E-2";
BigDecimal c = new BigDecimal(b);
System.out.println(c); // 0.0425
System.out.println(NumberUtils.isParsable(b)); // false