如何在Java中将数字四舍五入到小数点后n位?| Java Debug 笔记

204 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

提问:如何在Java中将数字四舍五入到小数点后n位?

我想要的是一种将双精度数转换为使用Half-up方法进行取整的字符串的方法-即,如果要取整的小数为5,则始终将其取整为下一个数字。这是大多数人在大多数情况下期望的四舍五入标准方法。

我也希望只显示有效数字-即不应有任何尾随零。

我知道执行此操作的一种方法是使用该String.format方法:

String.format("%.5g%n", 0.912385);

返回:

0.91239

这很好,但是即使数字不重要,它也始终显示小数点后5位的数字:

String.format("%.5g%n", 0.912300);

返回:

0.91230

另一种方法是使用DecimalFormatter:

DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);

返回:

0.91238

但是,如您所见,这使用了半数舍入。如果前一位是偶数,它将四舍五入。我想要的是这样的:

0.912385 -> 0.91239
0.912300 -> 0.9123

用Java实现此目标的最佳方法是什么?

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~} 使用setRoundingMode,将RoundingMode显式处理您的问题,然后将格式模式用于所需的输出。

例子:

DecimalFormat df = new DecimalFormat("#.####");
df.setRoundingMode(RoundingMode.CEILING);
for (Number n : Arrays.asList(12, 123.12345, 0.23, 0.1, 2341234.212431324)) {
    Double d = n.doubleValue();
    System.out.println(df.format(d));
}

给出输出:

12
123.1235
0.23
0.1
2341234.2125

高分回答:

假设value是double,您可以执行以下操作:

(double)Math.round(value * 100000d) / 100000d

这是5位数字的精度。零数表示小数位数。

文章翻译自 kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…

作者建议:需要注意DecimalFormat与BigDecimal的区别,作者常用BigDecimal

主要用户大数据,精度极高,引用类型,用于财务、金融等。

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️