BigDecimal和int,float,double之间的转换,以及BigDecimal的四则运算和MathContext用法

BigDecimal和int,float,double之间的转换,以及BigDecimal的四则运算和MathContext用法

mysql数据库的decimal类型逆向工程到eclipse后为BigDecimal类型,
关于BigDecimal类型的运算和与int型,double等之间的转换和其他问题:
1.和int类型之间的转换:

@Test
    public void testbigDecimal(){
        //Integer转BigDecimal
        Integer integer = 100;
        BigDecimal bigDecimal = new BigDecimal(integer);
        System.out.println(bigDecimal);

        //BigDecimal转Integer
        BigDecimal bigDecimal2 = new BigDecimal("123.1234567");
        Integer integer2 = bigDecimal2.intValue();
        System.out.println(integer2);
    }

输出如下:

100
123.12346

这里不存在舍入问题,比如:

@Test
    public void testbigDecimal(){
        //BigDecimal转Integer
        BigDecimal bigDecimal2 = new BigDecimal("123.9234567");
        Integer integer2 = bigDecimal2.intValue();
        System.out.println(integer2);
    }

输出还是123

2.和double及float的转换

@Test
    public void testbigDecimal() {
        // BigDecimal转Double
        BigDecimal bigDecimal = new BigDecimal("123.123456789");
        Double double1 = bigDecimal.doubleValue();
        System.out.println(double1);

        // BigDecimal转float
        BigDecimal bigDecimal2 = new BigDecimal("123.123456789");
        float f = bigDecimal.floatValue();
        System.out.println(f);
    }

这里存在舍入问题,所有输出是这样的:

123.123456789
123.12346

这里顺带介绍下BigDecimal 的构造函数中的MathContext ,看一下效果就知道了:

@Test
public void testbigDecimal(){
    MathContext mc = new MathContext(5);
    //BigDecimal转Double
    BigDecimal bigDecimal2 = new BigDecimal("123.12345678910", mc);
    Double double1 = bigDecimal2.doubleValue();
    System.out.println(double1);
}

输出结果是123.12这里截取成设置的5位了。

**3.**BigDecimal 的四则运算

@Test
    public void testbigDecimal(){
        MathContext mc = new MathContext(10);

        BigDecimal bigDecimal1 = new BigDecimal("100.12");
        BigDecimal bigDecimal2 = new BigDecimal("10.123");
        //加
        System.out.println(bigDecimal1.add(bigDecimal2));
        //减
        System.out.println(bigDecimal1.subtract(bigDecimal2));
        //乘
        System.out.println(bigDecimal1.multiply(bigDecimal2));
        //除
        System.out.println(bigDecimal1.divide(bigDecimal2,mc));
    }

这里的除法因为存在除不尽的情况,有时会抛出异常,所以可以使用MathContext 限制长度,输入如下:

110.243
89.997
1013.51476
9.890348711

更多

你可能感兴趣的:(日常问题-java,BigDecimal类型转换)