Java 双十进制格式问题

Java 双十进制格式问题,java,decimal,decimalformat,Java,Decimal,Decimalformat,我有一个双倍号码,是8.775。我想把它打印到8.77的地方。我尝试了这行代码,但Java一直将其舍入到8.78。这有什么办法吗 System.out.printf("%.2f", 8.775); 要将double舍入到地板上,您必须编写自己的函数或使用DecimalFormat,或者您可以使用Bigdecimal,它已经内置了这个函数 System.out.println(BigDecimal.valueOf(8.775).setScale(2, BigDecimal.ROUND_FLOOR

我有一个双倍号码,是8.775。我想把它打印到8.77的地方。我尝试了这行代码,但Java一直将其舍入到8.78。这有什么办法吗

System.out.printf("%.2f", 8.775);

要将double舍入到地板上,您必须编写自己的函数或使用DecimalFormat,或者您可以使用Bigdecimal,它已经内置了这个函数

System.out.println(BigDecimal.valueOf(8.775).setScale(2, BigDecimal.ROUND_FLOOR));
输出:

8,77
FLOOR
8.77
-8.78

DOWN
8.77
-8.77

如果要控制将double转换为字符串时使用的舍入,则需要使用DecimalFormat

你要么想要地板,它朝负无穷大的方向旋转,要么想要向下,它朝零的方向旋转,这取决于所需的行为,正数为负数,它们产生相同的结果:

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));
输出:

8,77
FLOOR
8.77
-8.78

DOWN
8.77
-8.77

然后不需要舍入,只需要截断数字。因为根据通常的四舍五入规则,8.775等于8.78,根据@Ivan所说的,我只需找到小数点的索引,然后从0,索引+2取子字符串。小心,确保字符串也有那么长。你想做什么