# BigDecimal加减乘除计算

$%u524D%u9635%u5B50%u505A%u9898%u9047%u5230%u4E86%u5927%u6570%u7684%u7CBE%u786E%u8BA1%u7B97%uFF0C%u518D%u6B21%u8BA4%u8BC6%u4E86bigdecimal %u5173%u4E8EBigdecimal%u610F%u5916%u7684%u6709%u8BB8%u591A%u5C0F%u77E5%u8BC6%u70B9%u548C%u5751%uFF0C%u8FD9%u91CC%u7279%u6B64%u6574%u7406%u4E00%u4E0B%u4E3A%u65B9%u4FBF%u4EE5%u540E%u5B66%u4E60%uFF0C%u5E0C%u671B%u80FD%u5E2E%u52A9%u5230%u5176%u4ED6%u7684%u840C%u65B0$

## BigDecimal的运算——加减乘除

### 首先是bigdecimal的初始化

        BigDecimal num1 = new BigDecimal(0.005);
BigDecimal num2 = new BigDecimal(1000000);
BigDecimal num3 = new BigDecimal(-1000000);
//尽量用字符串的形式初始化
BigDecimal num12 = new BigDecimal("0.005");
BigDecimal num22 = new BigDecimal("1000000");
BigDecimal num32 = new BigDecimal("-1000000");

### 乘法multiply()函数    除法divide()函数    绝对值abs()函数

        //加法

//减法
BigDecimal result2 = num1.subtract(num2);
BigDecimal result22 = num12.subtract(num22);

//乘法
BigDecimal result3 = num1.multiply(num2);
BigDecimal result32 = num12.multiply(num22);

//绝对值
BigDecimal result4 = num3.abs();
BigDecimal result42 = num32.abs();

//除法
BigDecimal result5 = num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
BigDecimal result52 = num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);

### ※ 注意：

1）System.out.println()中的数字默认是double类型的，double类型小数计算不精准。

2）使用BigDecimal类构造方法传入double类型时，计算的结果也是不精确的！

import java.math.BigDecimal;
import java.util.Scanner;

public class TestThree {

public static void main(String[] args) {

BigDecimal num1 = new BigDecimal(0.005);
BigDecimal num2 = new BigDecimal(1000000);
BigDecimal num3 = new BigDecimal(-1000000);
//尽量用字符串的形式初始化
BigDecimal num12 = new BigDecimal("0.005");
BigDecimal num22 = new BigDecimal("1000000");
BigDecimal num32 = new BigDecimal("-1000000");

//加法
//减法
BigDecimal result2 = num1.subtract(num2);
BigDecimal result22 = num12.subtract(num22);
//乘法
BigDecimal result3 = num1.multiply(num2);
BigDecimal result32 = num12.multiply(num22);
//绝对值
BigDecimal result4 = num3.abs();
BigDecimal result42 = num32.abs();
//除法
BigDecimal result5 = num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
BigDecimal result52 = num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);

System.out.println("加法用value结果："+result1);
System.out.println("加法用string结果："+result12);

System.out.println("减法value结果："+result2);
System.out.println("减法用string结果："+result22);

System.out.println("乘法用value结果："+result3);
System.out.println("乘法用string结果："+result32);

System.out.println("绝对值用value结果："+result4);
System.out.println("绝对值用string结果："+result42);

System.out.println("除法用value结果："+result5);
System.out.println("除法用string结果："+result52);
}
}

### 除法divide()参数使用

即为 （BigDecimal divisor 除数， int scale 精确小数位，  int roundingMode 舍入模式）


### 八种舍入模式解释如下

1、ROUND_UP

2、ROUND_DOWN

3、ROUND_CEILING

4、ROUND_FLOOR

5、ROUND_HALF_UP

6、ROUND_HALF_DOWN

7、ROUND_HALF_EVEN

1.15>1.2 1.25>1.2

8、ROUND_UNNECESSARY

http://www.bdqn.cn/news/201311/11834.shtml

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客