java BigDecimal详解

本文介绍了Java中的BigDecimal类用于进行精确的浮点数运算,包括加、减、乘、除的基本操作,并展示了如何保留精度、进行不同模式的取整。还讨论了取余运算(divideAndRemainder方法)以及如何使用compareTo方法比较大小。同时提到了BigDecimal与int之间的类型转换方法。
摘要由CSDN通过智能技术生成

本篇主要介绍BigDecimal类型基本操作+保留精度+取整+取余+比较大小+类型转换

基本操作加,减,乘,除

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

public class BigDecimalTest {

    public static void main(String[] args) {

        BigDecimal bignum1 = new BigDecimal("7.25");

        BigDecimal bignum2 = new BigDecimal("5.00");

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

    }

}

运行结果:

  和 是:12.25
  差 是:2.25
  积 是:36.2500
  商 是:1.45

保留精度及取整(保留0位小数)

  scale为小数位数;roundingMode为小数模式;

  除法保留50位小数:bignum1.divide(bignum2,50,BigDecimal.ROUND_UP);

  乘法保留一位小数: bignum1.multiply(bignum2).setScale(1,BigDecimal.ROUND_HALF_UP);

  乘法运行结果:积 是:36.3

  问题来了,我们不设置精度时是36.2500 保留一位小数时是36.3,这是为什么呢?原来和.ROUND_HALF_UP有关!

以不保留小数为例取整,各个roundingMode详解如下:

ROUND_UP:正数时,舍弃小数后(整数部分)加1,比如12.49结果为13。负数时,舍弃小数后(整数部分)减去1,-12.49结果为 -13

ROUND_DOWN:直接舍弃小数

ROUND_CEILING:如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作 (取附近较大的整数)

ROUND_FLOOR: 如果 BigDecimal 是正的,则做 ROUND_DOWN 操作;如果为负,则做 ROUND_UP 操作(取附近较小的整数)

ROUND_HALF_UP:四舍五入(取更近的整数)

ROUND_HALF_DOWN:同ROUND_HALF_UP 差别仅在于0.5时会向下取整

ROUND_HALF_EVEN:取最近的偶数

ROUND_UNNECESSARY:不需要取整,如果存在小数位,就抛ArithmeticException 异常

  看到这里我们可以推理在保留小数取整的时候,保留一位小数时36.25因为四舍五入到36.3,如果用ROUND_HALF_DOWN那结果就是36.2,如果用ROUND_UP那结果就是36.3,如果用ROUND_DOWN那结果就是36.2

取余(divideAndRemainder方法)

1

public BigDecimal[] divideAndRemainder(BigDecimal divisor);

该方法接收另一个BigDecimal 对象作为参数,该参数即为除数,返回一个BigDecimal数组,返回数组中包含两个元素,第一个元素为两数相除的商,第二个元素为余数。使用案例如下:

1

2

3

4

5

6

7

8

9

10

11

12

package net.csdn.test;

  

import java.math.BigDecimal;

  

public class TestBigDecimal {

    public static void main(String[] args) {

        BigDecimal amt = new BigDecimal(14);

        BigDecimal[] results = amt.divideAndRemainder(BigDecimal.valueOf(5.00));

        System.out.println(results[0]);

        System.out.println(results[1]);

    }

}

运行程序分别输出商2,余数4.0,可以达到和基本数据类型%运算相同的效果。

比较大小(compareTo)

  int a =baltotal.compareTo(hundred);  若a>0或a=1则baltotal大,a=0则baltotal等于参数,a<0或a=-1则baltotal小

  应用场景:电单车充电以电池电量百分之五为阶梯收费,百分之五收0.2元,百分之六收0.4元,这时需要判断取余后的余数

       是否大于0,int a =baltotal.compareTo(BigDecimal.ZERO);

int与bigdecimal的相互转换

   int转bigdecimal

1

2

3

BigDecimal number = new BigDecimal(0);

int value=1;

number=BigDecimal.valueOf((value);

  bigdecimal转int

1

2

BigDecimal b=new BigDecimal(45.45);

int a = b.intValue();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值