現在、小数点以下 2 桁の上限値を含むいくつかのテストを実行しています。これを実現するために、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 より大きい数値がパターンの範囲内にある必要があることに気付きました。これはバグですか、それとも何か不足していますか?