首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中将数字舍入到小数点的两位

Java中将数字舍入到小数点的两位
EN

Stack Overflow用户
提问于 2015-01-06 18:01:29
回答 3查看 960关注 0票数 0

我需要把数字四舍五入到小数点后的两位:

1.1245→1.13 1.1235→1.12

在过去的两天里,我一直在浏览StackOverflow,我一直无法找到任何解决方案,我发现这些解决方案都是有效的:

他们似乎都只是在小数点第三位截断这个数字,然后把它从小数点的四舍五入,这不是我想要做的。我试图从最右边的地方开始,然后适当地开始四舍五入;5-9上升,0-4没有效果,然后被丢弃。

下面是我正在使用的当前代码:

代码语言:javascript
复制
BigDecimal a = new BigDecimal("1.1245");
double b = Math.round(a.doubleValue() * 100) / 100;

System.out.print(a.setScale(2, BigDecimal.ROUND_HALF_EVEN) + " : "
+ a.setScale(2, BigDecimal.ROUND_HALF_UP) + " : "
+ b);

下面是控制台的直接输出:

这里的问题是,在所有上述情况下,我都期望1.13是结果,就好像遵循了以下过程:

代码语言:javascript
复制
1.1245 → 1.125 → 1.13
1.1235 → 1.124 → 1.12
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-06 18:43:18

我会用标准的四舍五入来测试距离,然后再调整和旋转:

代码语言:javascript
复制
    for (String string : new String[] {"1.1245", "1.1244", "1.1235", "1.1249", "1.1299"}) {
        BigDecimal a = new BigDecimal(string);

        if (a.setScale(2, BigDecimal.ROUND_HALF_UP).subtract(a).compareTo(new BigDecimal("-0.0044")) < 0)  {
            System.out.println(string + ":" + a.add(new BigDecimal("0.001")).setScale(2, BigDecimal.ROUND_HALF_UP));
        } else {
            System.out.println(string + ":" + a.setScale(2, BigDecimal.ROUND_HALF_UP));
        }
    }

结果:

代码语言:javascript
复制
1.1245:1.13
1.1244:1.12
1.1235:1.12
1.1249:1.13
1.1299:1.13
票数 1
EN

Stack Overflow用户

发布于 2015-01-06 18:21:09

我认为您应该检查一下您的规格,因为需求是不常见的。总之,我认为这做了你(似乎)需要的事情:

代码语言:javascript
复制
public BigDecimal round(BigDecimal n, int scale) {
    if (n.scale() > scale) {
        return round(n.setScale(n.scale() - 1, RoundingMode.HALF_UP), scale);
    } else {
        return n.setScale(scale, RoundingMode.UNNECESSARY);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-01-06 18:14:18

代码语言:javascript
复制
public static double Rnd(double d)
{
    d *= 100;
    d += .5;
    d = (int)d;
    d /= 100;
    return d;
}

这是我学到的最好的四舍五入的方法,因为这两个100度可以调整到不同的地方。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27804438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档