跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 小心 Java .math.MathContext
未分類
21 7 月 2020

小心 Java .math.MathContext

小心 Java .math.MathContext

資深大佬 : anzu 13

你以为他们输出是相同的,其实完全不同

BigDecimal original = new BigDecimal("2.345"); BigDecimal scaled = original.add(BigDecimal.TEN).setScale(2, RoundingMode.HALF_UP); MathContext mc = new MathContext(2, RoundingMode.HALF_UP); BigDecimal scaled2 = original.add(BigDecimal.TEN, mc);  // 12.35 System.out.println(scaled.toPlainString()); // 12 System.out.println(scaled2.toPlainString()); 

MathContext 的构造函数 MathContext(int setPrecision, RoundingMode setRoundingMode) 其中 setPrecision 指的是有效数字,而不是小数保留位数。与 roundingMode 参数放一起容易令人混淆。而且一般用到 BigDecimal 多半是重要的计算场景,一旦出错后果严重。

也有不少人吐槽: https://stackoverflow.com/questions/7539/use-of-java-math-mathcontext

大佬有話說 (4)

  • 資深大佬 : aguesuka

    单元测试的重要性就出来了

  • 主 資深大佬 : anzu

    @aguesuka 我就是写单元测试才发现的..

  • 資深大佬 : lululau

    precision 直翻不是“精度”的意思吗,精度不是相当于有效数字吗

  • 資深大佬 : yidinghe

    @lululau 对,事后再来看都看得懂,就是第一眼光看参数类型的话容易理解错

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具