我正在尝试在Java应用程序中对双精度浮点数进行取整(而不是四舍五入)以保留两位小数。我使用DecimalFormat
实现这一目标,但注意到对于接近零的负值,结果不是-0.01
而是-0.00
。
public class MyTest {
void formatAndPrint(double value) {
DecimalFormat df = new DecimalFormat("0.00");
df.setRoundingMode(RoundingMode.FLOOR);
System.out.println(value + " => " + df.format(value));
}
@Test
public void testFloor() {
formatAndPrint(2.3289); // 2.32
formatAndPrint(2.3); // 2.30
formatAndPrint(-1.172); // -1.18
formatAndPrint(0.001); // 0.00
formatAndPrint(0.0001); // 0.00
formatAndPrint(-0.001); // -0.01
formatAndPrint(-0.0001); // -0.00 WRONG, expected: -0.01
}
}
其他方案,例如Math.floor(value * 100.0) / 100.0
没有这个问题,但还有其他问题,比如错误地将2.3
向下舍入到2.29
。
是否有适用于Java的舍位解决方案适用于所有情况?