2017-08-03 80 views
2

下面的測試失敗:的Java 8:DecimalFormat的與舍入HALF_UP模式

@Test 
public void testRound() throws Exception { 
    double v = 0.015d; 
    DecimalFormat format = new DecimalFormat("#.##", new DecimalFormatSymbols(Locale.US)); 
    format.setRoundingMode(RoundingMode.HALF_UP); 
    assertEquals("0.02", format.format(v)); 
} 

我看到有解決的問題爲Java 7Java 8,但它仍然沒有對「jdk1.8.0_144爲我工作「:

junit.framework.ComparisonFailure: null 
Expected :0.02 
Actual :0.01 
+2

0.015不能exatly表示爲浮動點n紅棕色。它發生的最接近的可能表示略少,因此向下舍入。 – Henry

+1

雙數和浮點數不能完全表示0.015。不要使用雙重;而是從一開始就使用BigDecimal。 –

+0

那麼,這是一個正常的行爲?這不是Java 8中的錯誤,是嗎? –

回答

0

使用此:

DecimalFormat format = new DecimalFormat("#.###", new DecimalFormatSymbols(Locale.US)); 
+0

我需要正確舍入的格式「#。##」。 –

+0

它不會與2個小數點一起工作,因爲您會得到0.01,round_up會舍入到0.01,這就是爲什麼它不能正確工作。 – Whitebear