gpt4 book ai didi

java - Java中的数字四舍五入到小数点后两位

转载 作者:行者123 更新时间:2023-12-01 12:03:54 27 4
gpt4 key购买 nike

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

1.1245 → 1.131.1235→1.12

过去两天我一直在 StackOverflow 上搜索,但始终无法找到任何可行的解决方案:

他们似乎只是简单地截断小数点后第三位的数字,然后从那里四舍五入,这不是我想要做的。我试图从最右边的地方开始,然后开始适当舍入; 5-9上升,0-4无效并下降。

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

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);

这是直接来自控制台的输出:

console output

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

1.1245 → 1.125 → 1.13
1.1235 → 1.124 → 1.12

最佳答案

我会用标准舍入测试距离,然后再次调整和舍入:

    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));
}
}

结果:

1.1245:1.13
1.1244:1.12
1.1235:1.12
1.1249:1.13
1.1299:1.13

关于java - Java中的数字四舍五入到小数点后两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com