2
我們目前正在運行一些涉及天花板數字有兩位小數的測試。爲了實現這一點,我們使用Java的DecimalFormat。DecimalFormat不是天花板正確
但是,測試得到了奇怪的結果,特別是當我們想要增加一個'0.00xxx'數字時。
以下是正在使用的測試DecimalFormatter實例:
DecimalFormat decimalFormatter = new DecimalFormat("#########0.00");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);
這個測試按預期工作,也就是說,它是正確ceiled:
//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);
}
你能解釋爲什麼w e得到這種行爲。謝謝
編輯:如評論請求的另一個測試。仍然不起作用。
//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的數字必須在模式的範圍內。這是一個錯誤還是我錯過了什麼?
+1刪除我的答案是錯誤的:( –
嘗試同樣與0.0000006。請告訴我結果? –
這是因爲四捨五入不會只考慮一個數字超出了要求格式,數字被截斷爲'0.000',然後舍入到'0.00',但我不知道如何改變這種行爲, – Bobby