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); }