我们目前正在运行一些测试,其中涉及到小数点后两位的上限数字。为了实现这一点,我们使用 Java 的DecimalFormat。
然而,测试得到了奇怪的结果,尤其是当我们希望限制一个“0.00xxx”数字的情况下。
以下是测试使用的 DecimalFormatter 的实例:
DecimalFormat decimalFormatter = new DecimalFormat("#########0.00");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);
该测试按预期工作,也就是说,它的上限是正确的:
//The below asserts as expected
@Test
public void testDecimalFormatterRoundingDownOneDecimalPlace3()
{
String formatted = decimalFormatter.format(234.6000000000001);
Assert.assertEquals("Unexpected formatted number", "234.61", formatted);
}
但是,这不会:
//junit.framework.ComparisonFailure: Unexpected formatted number
//Expected :0.01
//Actual :0.00
@Test
public void testSmallNumber()
{
double amount = 0.0000001;
String formatted = decimalFormatter.format(amount);
Assert.assertEquals("Unexpected formatted number", "0.01", formatted);
}
您能否解释一下为什么我们会出现这种行为。谢谢
编辑:评论要求的另一项测试。还是不行。
//junit.framework.ComparisonFailure: null
//Expected :0.01
//Actual :0.00
@Test
public void testStackOverflow() throws Exception
{
double amount = 0.0000006;
String formatted = decimalFormatter.format(amount);
Assert.assertEquals("Unexpected formatted number", "0.01", formatted);
}
我注意到,要使其正常工作,大于 0 的数字必须在模式范围内。这是一个错误还是我错过了什么?