如何在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
来处理你的问题,使用half-even轮,然后使用格式模式来输出你需要的输出。
例:
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位数字的精度。 零的数量表示小数位数。
new BigDecimal(String.valueOf(double)).setScale(yourScale, BigDecimal.ROUND_HALF_UP);
会给你一个BigDecimal
。 要从中取出字符串,只需将该BigDecimal
的toString
方法或Java 5+的toPlainString
方法调用为纯格式字符串即可。
示例程序:
package trials;
import java.math.BigDecimal;
public class Trials {
public static void main(String[] args) {
int yourScale = 10;
System.out.println(BigDecimal.valueOf(0.42344534534553453453-0.42324534524553453453).setScale(yourScale, BigDecimal.ROUND_HALF_UP));
}
链接地址: http://www.djcxy.com/p/3631.html