本文正在参加「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实现此目标的最佳方法是什么?
高分回答:
使用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
主要用户大数据,精度极高,引用类型,用于财务、金融等。
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️