概述

如果直接进行浮点数之间的运算,有可能会得不到正确结果

Java浮点数优先使用double,先把double转化为String,然后通过BigDecimal的构造方法转化为BigDecimal

最后进行加减乘除的运算使用BigDecimal这个类的方法:

  1. public BigDecimal add(BigDecimal augend)

    传入的参数为加数

  2. public BigDecimal subtract(BigDecimal subtrahend)

    传入的参数为减数

  3. public BigDecimal multiply(BigDecimal multiplicand)

    传入的参数为乘数

  4. public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

    传入的参数一为除数,参数二为保留的小数位数,参数三为舍入的模式(各种模式看下图)

    image-20220417161001836

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
* @author LeDao
* @company
* @create 2021-06-21 12:38
*/
public class Test {

public static void main(String[] args) {
double d1 = 2.2;
double d2 = 1.81;
//转化为BigDecimal
BigDecimal b1 = new BigDecimal(String.valueOf(d1));
BigDecimal b2 = new BigDecimal(String.valueOf(d2));
//加
System.out.println(b1.add(b2));
//减
System.out.println(b1.subtract(b2));
//乘
System.out.println(b1.multiply(b2));
//除
System.out.println(b1.divide(b2, 2, RoundingMode.HALF_UP));
}
}

PS.

进行除法运算时,一定要指定保留的小数位数和舍入的模式

如果使用public BigDecimal divide(BigDecimal divisor)这个方法,当除不尽时(即结果的小数无限),会报错,报错信息如下图:

image-20220417162129750