BigDecimal用法

目录:
一、基本用法(加减乘除)
二、转换
三、比较
四、取整模式

一、基本用法

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

double10.01int10float10.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
              远离零方向舍入的舍入模式。

版权声明:本文为earnest_1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。