参考文档:https://blog.csdn.net/weixin_44421461/article/details/106726591

    1. BigDecimal a = new BigDecimal(1.01);
    2. BigDecimal b = new BigDecimal(1.02);
    3. BigDecimal c = new BigDecimal("1.01");
    4. BigDecimal d = new BigDecimal("1.02");
    5. System.out.println(a.add(b));
    6. System.out.println(c.add(d));
    7. 输出:
    8. 2.0300000000000000266453525910037569701671600341796875
    9. 2.03

    最精确的方法:
    double 换成String 然后用构造方法创建 不会缺精度

    1. /**
    2. *
    3. * 加减乘除
    4. */
    5. public class BigDecimalUtil {
    6. private BigDecimalUtil() {
    7. }
    8. // 加
    9. public static BigDecimal add(double v1, double v2) {// v1 + v2
    10. BigDecimal b1 = new BigDecimal(Double.toString(v1));
    11. BigDecimal b2 = new BigDecimal(Double.toString(v2));
    12. return b1.add(b2);
    13. }
    14. // 减
    15. public static BigDecimal sub(double v1, double v2) {
    16. BigDecimal b1 = new BigDecimal(Double.toString(v1));
    17. BigDecimal b2 = new BigDecimal(Double.toString(v2));
    18. return b1.subtract(b2);
    19. }
    20. // 乘
    21. public static BigDecimal mul(double v1, double v2) {
    22. BigDecimal b1 = new BigDecimal(Double.toString(v1));
    23. BigDecimal b2 = new BigDecimal(Double.toString(v2));
    24. return b1.multiply(b2);
    25. }
    26. // 除
    27. public static BigDecimal div(double v1, double v2) {
    28. BigDecimal b1 = new BigDecimal(Double.toString(v1));
    29. BigDecimal b2 = new BigDecimal(Double.toString(v2));
    30. // 2 = 保留小数点后两位 ROUND_HALF_UP = 四舍五入
    31. return b1.divide(b2, 2, RoundingMode.ROUND_HALF_UP);// 应对除不尽的情况
    32. }
    33. }