螺旋小蜗 2024-09-06 17:50 采纳率: 100%
浏览 10
已结题

BigDecimal 精度问题

今天遇到一个问题,下面代码运行的结果是1000,如果把倒数第二行的代码的MathContext去掉如注释所示,运行就正常了,不知道是不是MathContext的问题,不知道是咋回事。研究过源码的给指点下

public static void main(String[] args) {
        BigDecimal operand_target = new BigDecimal("-10.12");
        BigDecimal temp = new BigDecimal("1008");
        BigDecimal cal_value = BigDecimal.ZERO;
        // cal_value = temp.add(operand_target);
        cal_value = temp.add(operand_target, new MathContext(2, RoundingMode.HALF_UP));
        System.out.println(cal_value.toPlainString());
    }

  • 写回答

1条回答 默认 最新

  • 十八年后又是 2024-09-06 18:19
    关注

    对精度的理解有误。精度不是小数点后几位数,而是所有的数位。
    === ==

    new MathContext(2, 
    
    

    要改成

    
    new MathContext(5, 
    
    

    == ==

    就可以了。可以看看api文档

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月10日
  • 已采纳回答 2月10日
  • 创建了问题 9月6日