

使用步骤:
package com.itheima.d14_bigdecimal;import java.math.BigDecimal;import java.math.RoundingMode;public class BigDecimalDemo {public static void main(String[] args) {// 浮点型运算的时候直接 + * / 可能会出现数据失真(精度问题)// 以下运算都失真了,System.out.println(0.09 + 0.01); //0.09999999999999999System.out.println(1.0 - 0.32); // 0.6799999999999999System.out.println(1.015 * 1000); // 1014.9999999999999System.out.println(1.301 / 100); // 0.013009999999999999System.out.println("----------------------------");double a = 0.1;double b = 0.2;double c = a + b;System.out.println(c); //0.30000000000000004System.out.println("---------------------");// 包装浮点型数据成为大数据对象 BigDecimal/*** 该valueOf方法返回的是一个有参构造器 相当于创建了BigDecimal对象* return new BigDecimal(Double.toString(val));*/BigDecimal a1 = BigDecimal.valueOf(a);BigDecimal b1 = BigDecimal.valueOf(b);BigDecimal c1 = a1.add(b1); // 0.3 成功避免了失真问题System.out.println(c1); // BigDecimal类型是引用类型,应该打印的是地址,这里打印的是数值,所以重写了toString方法// 目的:double BigDecimal 只是手段,实现double 类型的手段// double rs1 = c1; // BigDecimal的值,不能直接接收double rs = c1.doubleValue(); // 将c1的值转换为double类型System.out.println(rs);// 注意事项:BigDecimal类型的数据 是一定要精度运算的 的方法divideBigDecimal a11 = BigDecimal.valueOf(10.0);BigDecimal b11 = BigDecimal.valueOf(3.0);// BigDecimal c11 = a11.divide(b11); // 会报错,必须做精度运算/*** 参数一:除数 参数二:保留小数位 参数三:舍入模式*/BigDecimal c11 = a11.divide(b11,2, RoundingMode.HALF_UP); // 3.3333333System.out.println(c11); //3.33 保留了两位小数}}
