【问题标题】:Java DecimalFormat rounding error?Java DecimalFormat 舍入错误?
【发布时间】:2015-02-06 23:30:36
【问题描述】:

DecimalFormat 舍入数字的方式似乎有些不一致。

new DecimalFormat("0.0", new DecimalFormatSymbols(Locale.US)).format(number)

这是一些不同的number 值返回的内容。

  • 0.05 返回 0.0
  • 0.15 返回 0.2
  • 0.25 返回 0.2
  • 0.35 返回 0.4
  • 0.45 返回 0.4

为什么会这样?更重要的是,我怎样才能得到正确的值(舍入 0.25 时为 0.3,舍入 0.45 时为 0.5)?

【问题讨论】:

    标签: java decimalformat


    【解决方案1】:

    Javadoc 声明:

    DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。

    HALF_EVEN 与您所注意到的完全一样:当它恰好位于两个数字的中间时,它更喜欢四舍五入到最接近的偶数。 (由于多种原因,这很有用,主要是因为它不会平均上下偏差,倾向于平衡舍入误差。)

    请致电setRoundingMode(RoundingMode.HALF_UP) 了解您描述的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多