如何在Java中舍入一个数字到n个小数位

问题:

我想要的是一种将double转换为使用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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to round a number to n decimal places in Java

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

58 − = 50