2016-09-08 111 views
-3

我已將最大分數數字設置爲4, 但爲什麼N.doublevalue()1234.56789999999, 的輸出不是1234.5679?Java:解析NumberFormat對象並將其分配給Number對象

try{ 
    NumberFormat NF = NumberFormat.getInstance(); 
    NF.setMaximumFractionDigits(4); 
    NF.setMinimumFractionDigits(3); 
    Number N = NF.parse("1234.56789999999"); 
    System.out.println(N.doubleValue()); 
    System.out.println(NF.format(1234.567899999)); 
    } 

    catch(ParseException e){e.printStackTrace();} 
    } 
+0

因爲你只是在打印一個沒有任何固有格式的'double' –

+0

你有什麼特殊要求?爲了精確舍入,你應該使用BigDecimal。 – marthursson

+0

參考這個鏈接,你會得到確切的主意http://stackoverflow.com/questions/50532/how-do-i-format-a-number-in-java – Santhucool

回答

0

N.doubleValue()其實你轉換到Numberdouble。 double是一個基本類型,它不支持任何四捨五入,它是在內存中寫入的原始浮點值,它不具有您嘗試將其轉換爲的精確值,所以它是與可能值最匹配的值爲double。也就是說,double沒有所有可能的值,因爲它的內存有限,雙精度數據類型是一個雙精度64位IEEE 754浮點,精度(點之後的位置)更大對於較小的double值較低。很大的double數字根本就沒有任何精度。 float也是如此,但浮點數的精確度遠低於double

+0

謝謝,我明白了! –