小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
bigDecimal的相关运算:加减乘除
bigDecimal的运算需要调用方法;
加法运算:
bignum1.add(bignum2)
减法运算:
bignum1.subtract(bignum2)
乘法运算:
bignum1.multiply(bignum2)
除法运算:
bignum1.divide(bignum2)
注意: 在使用以上方法时,bignum1和bignum2均不能为null,否则会报空指针异常。
示例代码如下:
public static void main(String[] args)throws Exception {
BigDecimal bignum1 = new BigDecimal("10");
BigDecimal bignum2 = new BigDecimal("5");
BigDecimal bignum3 = null;
//加法
bignum3 = bignum1.add(bignum2);
System.out.println("求和:" + bignum3);
//减法
bignum3 = bignum1.subtract(bignum2);
System.out.println("求差:" + bignum3);
//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println("乘法积:" + bignum3);
//除法
bignum3 = bignum1.divide(bignum2);
System.out.println("除法结果:" + bignum3);
}
复制代码
运行结果如下:
求和:15
求差:5
乘法积:50
除法结果:2
为什么要用BigDecimal?
为什么要用BigDecimal呢,这里存在的一个很大的问题就是精度问题,因为在Java中的浮点数据类型,比如float,或者是double,都会在高精度运算中丢失精度;从而导致数据计算不准确。
尤其是涉及到银行、金额等业务时,一个不小心就会导致灾难式的问题产生。
所以,在不能使用float和double,我们就会去使用不会丢失精度的BigDecimal。
BigDecimal的其他功能
BigDecimal中也提供了小数的四舍五入等方法,并且在保留小数的方法中也有几个可选项。
如下示例代码,大家可以运行一下试试。
public static void main(String[] args) throws Exception {
BigDecimal b = new BigDecimal("1.125");
//表示保留一位小数,默认用四舍五入方式。
double result1 = b.setScale(1).doubleValue();
System.out.println("默认用四舍五入方法" + result1);
//直接删除多余的小数位。如2.35会变成2.3;
double result2 = b.setScale(1, BigDecimal.ROUND_DOWN).doubleValue();
System.out.println("删除多余的小数位:" + result2);
//进位处理,2.35变成2.4
double result3 = b.setScale(1, BigDecimal.ROUND_UP).doubleValue();
System.out.println("直接进一" + result3);
//四舍五入,2.35变成2.4
double result4 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("四舍五入的值:" + result4);
//四舍五入,2.35变成2.3,如果是5则向下舍
double result5 = b.setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
System.out.println("四舍六入的值:" + result5);
}
复制代码