目录:
一、基本用法(加减乘除)
二、转换
三、比较
四、取整模式
一、基本用法
1、加
double d = 10.01;
// 这么转换有精度损益,建议用String。我们如果需要精确计算,非要用String来够造BigDecimal不可!
System.out.println(new BigDecimal(d));
System.out.println(BigDecimal.valueOf(d));
BigDecimal d2BigDecimal = BigDecimal.valueOf(d);
BigDecimal b1 = new BigDecimal("0.03");
// 加:add
BigDecimal result1 = d2BigDecimal.add(b1);
System.out.println(result1);
console
10.0099999999999997868371792719699442386627197265625
10.01
加法:10.04
2、减
// 减:subtract
BigDecimal result2 = d2BigDecimal.subtract(b1);
System.out.println("减法:" + result2);
console
减法:9.98
3、乘
// 乘:multiply
BigDecimal result3 = d2BigDecimal.multiply(b1);
System.out.println("乘法:" + result3);
console
乘法:0.3003
3.1、乘法精度值
// 保留两位,四舍五入。scale指的是你小数点后的位数,默认四舍五入。
BigDecimal result3_ = d2BigDecimal.multiply(b1).setScale(2, RoundingMode.HALF_UP);
System.out.println("乘法(保留两位,四舍五入):" + result3_);
console
乘法(保留两位,四舍五入):0.30
4、除
// 除:divide。保留两位,四舍五入
BigDecimal result4 = d2BigDecimal.divide(b1, 2, RoundingMode.HALF_UP);
System.out.println("除法(保留两位,四舍五入):" + result4);
console
除法(保留两位,四舍五入):333.67
二、转换
// 转double
System.out.println("转double:" + d2BigDecimal.doubleValue());
// 转int
System.out.println("转int:" + d2BigDecimal.intValue());
// 转float
System.out.println("转float:" + d2BigDecimal.floatValue());
// 转Long
System.out.println("转Long:" + d2BigDecimal.longValue());
// 转String
System.out.println("转String:" + d2BigDecimal.toString());
console
转double:10.01
转int:10
转float:10.01
转Long:10
转String:10.01
三、比较
// 比较:compareTo
int compare = d2BigDecimal.compareTo(b1);
// 大于为1,等于为0,小于为-1
System.out.println(compare);
BigDecimal d2BigDecimal2 = new BigDecimal("10.01");
int compare2 = d2BigDecimal.compareTo(d2BigDecimal2);
System.out.println(compare2);
console
1
0
四、取整模式
RoundingMode枚举
为了能更好理解,我们可以画一个XY轴:
RoundingMode.CEILING:取右边最近的整数
RoundingMode.DOWN:去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整
RoundingMode.FLOOR:取左边最近的正数
RoundingMode.HALF_DOWN:五舍六入,负数先取绝对值再五舍六入再负数
RoundingMode.HALF_UP:四舍五入,负数原理同上
RoundingMode.HALF_EVEN:这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入
BigDecimal常量
BigDecimal枚举常量用法摘要 :
CEILING
向正无限大方向舍入的舍入模式。
DOWN
向零方向舍入的舍入模式。
FLOOR
向负无限大方向舍入的舍入模式。
HALF_DOWN
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
HALF_EVEN
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
HALF_UP
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
UNNECESSARY
用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
UP
远离零方向舍入的舍入模式。