我有一個雙變量:如何避免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)。
我有一個雙變量:如何避免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)。
double實際上並沒有「保存」爲字符串。這只是一個格式問題 - 你應該看到DecimalFormat
。不過,它絕對不會是,正好是 0.000001,因爲該數字不能完全表示爲雙精度。我會強烈建議您使用BigDecimal
而不是精確的十進制值問題(因爲它聽起來像他們在這裏)。
謝謝,Jon! :) – Vikram
的確,該號碼未使用科學(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分鐘後進入)
1Ex格式是顯示問題;該號碼以任何方式保存。使用適當的格式字符串以您想要的方式顯示數字。 –
羅伯特,你能告訴我如何在這種情況下使用適當的字符串格式? – Vikram
http://download.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html –