2011-07-28 63 views
3

我有一個雙變量:如何避免Double值以1Ex格式存儲?

private double b=0.0; 

我b中以某字段的值(該值是9.99999999 0.0之間)。大多數情況下,用戶輸入0.0到1.0之間的值。

當我在'b'中保存用戶的值時,如果該值爲0.000001,則它將被保存爲1E-6,並且下次在屏幕上顯示爲相同(這是因爲b是雙精度) 。

在Java中有什麼辦法(只是通過調用某種方法),我可以避免將值轉換爲1E-6格式?我想只保存用戶輸入的值(0.000001)。

+1

1Ex格式是顯示問題;該號碼以任何方式保存。使用適當的格式字符串以您想要的方式顯示數字。 –

+0

羅伯特,你能告訴我如何在這種情況下使用適當的字符串格式? – Vikram

+0

http://download.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html –

回答

12

double實際上並沒有「保存」爲字符串。這只是一個格式問題 - 你應該看到DecimalFormat。不過,它絕對不會是,正好是 0.000001,因爲該數字不能完全表示爲雙精度。我會強烈建議您使用BigDecimal而不是精確的十進制值問題(因爲它聽起來像他們在這裏)。

+0

謝謝,Jon! :) – Vikram

2

的確,該號碼未使用科學(E)符號存儲在內存中。

您可以通過不同的數字格式證明這一點給自己,當你將它輸出:

@Test 
public void testLittle() { 
    double myNum = 0.000001; 
    System.out.printf("%f \n",myNum); 
} 

你一定要留意張貼在這裏回答其他的建議,使用BigDecimal如果你真的想輸出匹配輸入,因爲一些浮點值不是你認爲他們在計算機中表示時的值。 (參考:IEEE-754

「Java Puzzlers」演示文稿有時會討論這些奇怪的行爲,並且總是一種有趣的學習方式。 (請參閱this talk from Google I/O 2011,3分鐘後進入)