大丈夫生居天地之间,岂能郁郁久居人下!
--------《三国演义》
在商业计算中,对数字精度要求高,我们可以用BigDecimal来处理这些问题。
(一)常用方法(加,减,乘,除)
BigDecimal b1 = new BigDecimal("6");
BigDecimal b2 = new BigDecimal("2");
//加
System.out.println(b1.add(b2)); //8
//减
System.out.println(b1.subtract(b2)); //4
//乘
System.out.println(b1.multiply(b2)); //12
//除
System.out.println(b1.divide(b2)); //3
//绝对值
System.out.println(b1.subtract(b2).abs()); //4
需要注意的是,我们在构造BigDecimal对象时,尽量不要使用double类型值去构造,否则会出现下面的问题
double d1=0.001;
BigDecimal d =new BigDecimal(d1);
System.out.println(d);
输出:
0.001000000000000000020816681711721685132943093776702880859375
这里会输出一个比0.001大的值,所以不推荐使用double类型的值去构造。我们可以这样
double d1=0.001;
//用String.valueOf把d转换成String类型,再去构造。
BigDecimal d =new BigDecimal(String.valueOf(d1));
//这样输出的就是实际的值0.001
System.out.println(d); //0.001
(二)divide(÷)精度计算
BigDecimal b1 = new BigDecimal("1256");
BigDecimal b2 = new BigDecimal("1000");
//四舍五入保留两位小数
BigDecimal b3=b1.divide(b2,2,BigDecimal.ROUND_HALF_UP); //输出:1.26
//向上取整
BigDecimal b4=b1.divide(b2,BigDecimal.ROUND_UP); //输出:2
//向下取整
BigDecimal b5=b1.divide(b2,BigDecimal.ROUND_DOWN); //输出:1
//保留两位小数向上取整
BigDecimal b6=b1.divide(b2,2,BigDecimal.ROUND_UP); //输出:1.26
BigDecimal b7 = new BigDecimal("12.51");
//保留一位小数向上取整
BigDecimal b8=b7.setScale( 1,BigDecimal.ROUND_UP); 输出 12.6
BigDecimal b3=b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);
divide除法中的三个参数分别表示: 第一个表示除数,第二个表示保留小数位数 ,第三个是取舍规则,这里的BigDecimal.ROUND_HALF_UP表示四舍五入。
(三)BigDecimal.setScale()方法
BigDecimal b1 = new BigDecimal("1.265");
// 保留一位,向下取整
System.out.println(b1.setScale(1, BigDecimal.ROUND_DOWN)); // 输出:1.2
// 保留一位,向上取整
System.out.println(b1.setScale(1, BigDecimal.ROUND_UP)); // 输出:1.3
//四舍五入,保留一位小数
System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_UP)); // 输出:1.3
(四) BigDecimal的常量
// 常量 0
System.out.println(BigDecimal.ZERO); // 输出 0
今天就写到这里啦,明天见!