1. 加减乘除
BigDecimal bignum1 = new BigDecimal("10");
BigDecimal bignum2 = new BigDecimal("5");
BigDecimal bignum3 = null;
加法 add
bignum3 = bignum1.add(bignum2);
减法 subtract
bignum3 = bignum1.subtract(bignum2);
乘法 multiply
bignum3 = bignum1.multiply(bignum2);
除法 divide
bignum3 = bignum1.divide(bignum2);
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) {
if (roundingMode < ROUND_UP || roundingMode > ROUND_UNNECESSARY)
throw new IllegalArgumentException("Invalid rounding mode");
if (this.intCompact != INFLATED) {
if ((divisor.intCompact != INFLATED)) {
return divide(this.intCompact, this.scale, divisor.intCompact, divisor.scale, scale, roundingMode);
} else {
return divide(this.intCompact, this.scale, divisor.intVal, divisor.scale, scale, roundingMode);
}
} else {
if ((divisor.intCompact != INFLATED)) {
return divide(this.intVal, this.scale, divisor.intCompact, divisor.scale, scale, roundingMode);
} else {
return divide(this.intVal, this.scale, divisor.intVal, divisor.scale, scale, roundingMode);
}
}
}
第一个参数是分母;第二个参数是保留的小数位数,第三个参数是数据的处理方式(四舍五入等)
2. 比较大小
使用compareTo(BigDecimal)方法比较大小。
int flag = bigdemical1.compareTo(bigdemical2)
flag = -1,表示bigdemical1小于bigdemical2;
flag = 0,表示bigdemical1等于bigdemical2;
flag = 1,表示bigdemical1大于bigdemical2;
实际中直接跟0比较
3. BigDecimal.setScale()方法用于格式化小数点
//表示保留一位小数,默认用四舍五入方式
setScale(1)
//直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_DOWN)
//进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_UP)
//四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)
//四舍五入,2.35变成2.3,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_HALF_DOWN)
//接近正无穷大的舍入
setScaler(1,BigDecimal.ROUND_CEILING)
//接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
setScaler(1,BigDecimal.ROUND_FLOOR)
//向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
setScaler(1,BigDecimal.ROUND_HALF_EVEN)
格式化
由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
//建立货币格式化引用
NumberFormat currency = NumberFormat.getCurrencyInstance();
//建立百分比格式化引用
NumberFormat percent = NumberFormat.getPercentInstance();
//百分比小数点最多3位
percent.setMaximumFractionDigits(3);
//贷款金额
BigDecimal loanAmount = new BigDecimal("150.48");
//利率
BigDecimal interestRate = new BigDecimal("0.008");
//相乘
BigDecimal interest = loanAmount.multiply(interestRate);
//贷款金额: ¥150.48
System.out.println("贷款金额:\t" + currency.format(loanAmount));
//利率: 0.8%
System.out.println("利率:\t" + percent.format(interestRate));
//利息: ¥1.20
System.out.println("利息:\t" + currency.format(interest));
参考资料
BigDecimal:BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
网友评论