image.png
    image.png
    使用步骤:
    image.png

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