【问题标题】:How to make round up to count up the even decimal value (example., if it is 2.25 it should round up to 2.3 not 2.2)如何向上取整以计算偶数十进制值(例如,如果是 2.25,则应向上取整为 2.3 而不是 2.2)
【发布时间】:2014-09-12 07:35:41
【问题描述】:

我正在尝试使用下面的代码将双精度值格式化为一个小数点,但它会产生两个不同的舍入值。

 double d1= 4.55;
 double d2= 17.85;
 DecimalFormat oneDForm = new DecimalFormat("#.0");
 System.out.println(oneDForm.format(d1));
 System.out.println(oneDForm.format(d2));

输出: 4.6 17.8(预计 17.9)

但是我想要通过将小数点 17.85 加到 17.9 来进行汇总,如何实现呢?

【问题讨论】:

  • 你有完整的代码吗?
  • 这是默认行为,四舍五入为偶数;见docs.oracle.com/javase/1.5.0/docs/api/java/math/…
  • 是的,我有。公共类测试 { public static void main(String[] args) { double d1= 4.55;双 d2 = 17.85; DecimalFormat oneDForm = new DecimalFormat("#.0"); System.out.println(oneDForm.format(d1)); System.out.println(oneDForm.format(d2)); } }
  • @pujari 我相信以下答案中提供的信息是有效的,但我不知道你不能接受任何答案,所以它可能对不需要花时间查看未答复的人有用像这样的问题。你们不明白。

标签: java format double rounding


【解决方案1】:

普吉里

DecimalFormat 的默认舍入模式使用半偶数舍入

According to the document

“舍入模式向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下,向偶数邻居舍入。如果丢弃的分数左侧的数字是奇数,则行为与 ROUND_HALF_UP 相同;行为与如果是偶数,则为 ROUND_HALF_DOWN。请注意,这是一种舍入模式,可在对一系列计算重复应用时最大限度地减少累积误差。.."

this was also mentioned in

【讨论】:

    【解决方案2】:

    回答你的问题,

    double d1= 4.55;
    double d2= 17.85;
    DecimalFormat oneDForm = new DecimalFormat("#.0");
    oneDForm.setRoundingMode(RoundingMode.HALF_UP); //You're changing default behavior here
    System.out.println(oneDForm.format(d1));
    System.out.println(oneDForm.format(d2));
    

    您预期的输出将是:4.6、17.9

    据我了解,

    您不能直接将17.85 向上舍入到17.9,这是默认行为,向上舍入是这样进行的,即使是小数,它也会向上舍入到可能的最小数字

    例如,如果它的 .05,.25,.45.. 将四舍五入为 .0,.2,.4,而对于奇数小数则相反

    我相信this 有助于实现这一目标。 This 帖子与您的帖子仅相似

    【讨论】:

    • 我的问题是为什么 17.75 被四舍五入为 17.8 而 17.85 也被四舍五入为 17.8。
    • bcoz,0.7 是奇数,0.8 是偶数。如果您舍入 17.95,则结果为 18.0 而不是 17.9,因为 0.9 是奇数。我想我的回答很好地解释了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多