2013-07-10 35 views

回答

1

一個很好的方法來檢查,如果你的價值發生變化時,通過做這樣的事情:

double a= 199812280115; 
double b= 199812280000; 
double c = a - b; 
System.out.println(c); 

你會看到自己,如果你的雙已經失去精度。

+0

當然'b'也可能失去精度......但是,這是一個有用的方法。 – Floris

5

根據默認的toString()vaue,控制檯中打印的double值已被格式化,但值保持不變。如果您希望按「原樣」打印值,則應使用NumberFormat進行格式化和打印。

0

你可以使用

System.out.format("%12f", a); 

要看到它的盛開的數量。

+0

因爲'a'是一個double,所以它不適用于格式字符串'「%12d」',它可能應該是'「%12f」'。 – kuporific

+0

@ kuporific - 當然,我的壞。固定。 – Floris

1

是,您看到的輸出確實顯示值已被更改。

請注意,您只能看到小數點後的8位數字。數據類型的double在小數點後有足夠的15-16位數的精度。 Java中的默認格式輸出最少的數字位數,以區分數字與其鄰居,因此您應該看到所有的數字。

此外,指數是錯誤的。預期產出爲1.99812280115E11

+0

值如何改變? '199812280115'和'1.99812280115E11'看起來相當於我,沒有損失精度 – kuporific

+0

@kuporific,OP報告得到1.9981228E13。 – Joni