双位小数格式问题

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