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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
类型进行转换? 回答: 在Java中,可以使用BigDecimal类来进行BigDecimalint类型之间转换。如果要将一个int类型的值转换BigDecimal类型,可以使用BigDecimal的构造函数,将int值作为参数传入。例如,可以使用以下代码将一个int类型的值转换BigDecimal类型: ```java int a = 1; BigDecimal bigDecimal = new BigDecimal(a); ``` 如果要将一个BigDecimal类型的值转换int类型,可以使用BigDecimalintValue()方法。该方法将返回一个int类型的值,表示BigDecimal的整数部分。例如,可以使用以下代码将一个BigDecimal类型的值转换int类型: ```java BigDecimal bigDecimal2 = new BigDecimal("123.1234567"); int integer2 = bigDecimal2.intValue(); ``` 需要注意的是,当将一个BigDecimal类型的值转换int类型时,如果BigDecimal的小数部分存在,会发生舍入。如果不希望发生舍入,可以使用setScale()方法设置小数位数为0,然后再进行转换。例如: ```java BigDecimal bigDecimal2 = new BigDecimal("123.9234567"); int integer2 = bigDecimal2.setScale(0, RoundingMode.DOWN).intValue(); ``` 这样可以确保将BigDecimal类型的值转换int类型时不发生舍入。 #### 引用[.reference_title] - *1* *2* [BigDecimalintfloatdouble之间转换,以及BigDecimal四则运算MathContext用法](https://blog.csdn.net/ThatsThePrice/article/details/102931329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【Java】BigDecimal和String,BigDecimalInt的类型转换](https://blog.csdn.net/superone52033/article/details/128873543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值