如何在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中实现这个最好的方法是什么?


使用时setRoundingModeRoundingMode明确设置以半双轮处理您的问题,然后使用格式模式输出所需的输出。

例:

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

假设valuedouble,你可以这样做:

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

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


你也可以使用

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

以确保你有尾随0。

添加评论

友情链接:蝴蝶教程