双位小数格式问题
Double decimal formatting issue
我有一个双数 8.775。我想到达打印 8.77 的位置。我试过这行代码,但 Java 一直四舍五入到 8.78。有什么解决办法吗?
System.out.printf("%.2f", 8.775);
要四舍五入到底数,您必须编写自己的函数(或使用 DecimalFormat),或者您可以使用例如已经内置此功能的 Bigdecimal。
System.out.println(BigDecimal.valueOf(8.775).setScale(2, BigDecimal.ROUND_FLOOR));
输出:
8,77
如果您想控制将 double
转换为 String
时使用的舍入,您需要使用 DecimalFormat
。
你要么想要 FLOOR
,向负无穷大舍入,要么 DOWN
向零舍入,这取决于负数的期望行为(对于正数,它们产生相同的结果) :
DecimalFormat df = new DecimalFormat(".##");
df.setRoundingMode(RoundingMode.FLOOR);
System.out.println("FLOOR");
System.out.println(df.format(8.775));
System.out.println(df.format(-8.775));
System.out.println("DOWN");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(8.775));
System.out.println(df.format(-8.775));
输出:
FLOOR
8.77
-8.78
DOWN
8.77
-8.77
double val = 8.775;
double output = new BigDecimal(val)
.setScale(2, RoundingMode.FLOOR)
.doubleValue();
System.out.println(output); // 8.77
System.out.printf("%.2f\n", output); // 8.77
我有一个双数 8.775。我想到达打印 8.77 的位置。我试过这行代码,但 Java 一直四舍五入到 8.78。有什么解决办法吗?
System.out.printf("%.2f", 8.775);
要四舍五入到底数,您必须编写自己的函数(或使用 DecimalFormat),或者您可以使用例如已经内置此功能的 Bigdecimal。
System.out.println(BigDecimal.valueOf(8.775).setScale(2, BigDecimal.ROUND_FLOOR));
输出:
8,77
如果您想控制将 double
转换为 String
时使用的舍入,您需要使用 DecimalFormat
。
你要么想要 FLOOR
,向负无穷大舍入,要么 DOWN
向零舍入,这取决于负数的期望行为(对于正数,它们产生相同的结果) :
DecimalFormat df = new DecimalFormat(".##");
df.setRoundingMode(RoundingMode.FLOOR);
System.out.println("FLOOR");
System.out.println(df.format(8.775));
System.out.println(df.format(-8.775));
System.out.println("DOWN");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(8.775));
System.out.println(df.format(-8.775));
输出:
FLOOR
8.77
-8.78
DOWN
8.77
-8.77
double val = 8.775;
double output = new BigDecimal(val)
.setScale(2, RoundingMode.FLOOR)
.doubleValue();
System.out.println(output); // 8.77
System.out.printf("%.2f\n", output); // 8.77