2016-09-21 85 views
2

我有一個關於下面的代碼的問題,如果我們使用Float.toString()的方法,它會做一些舍入的數字。它爲什麼這樣做?這背後有什麼具體的邏輯嗎?爲什麼Float.toString()更改數值?

我也看過Float.toString()的內部代碼。它叫FloatingDecimal(f).toJavaFormatString()

public static void main(String[] args) {        
    Float f = Float.intBitsToFloat(1342177280); 

    String simpleString = new BigDecimal(f).toPlainString(); 
    System.out.println("simpleString value " + simpleString); 

    String withToString = new BigDecimal(Float.toString(f)).toPlainString(); 
    System.out.println("withToString value " + withToString); 
} 

輸出是這樣

simpleString value 8589934592 
withToString value 8589934600 //here value changed 
+1

將Float更改爲Double。我只能猜測,尾數部分大於Float的精度。 –

+1

只是因爲Float.toString返回這個:8.5899346E9所以BigDecimal只能使用剩下的東西 – AxelH

+0

是的,它看起來像是在浮動的toString實現中選擇的精度, –

回答

1

的BigDecimal的構造很簡單。給我一個字符串,我會用它創建一個數字。如果你給我一個號碼,我會直接使用他的價值。

由於您的示例中生成的字符串看起來像8.5899346E9,因此普通數字中的值爲8589934600。如果你發送的是浮點實例,它將(我猜)與這些位一起工作以儘可能精確地重新創建值。

相關問題