2011-03-21 28 views
0

我正在使用StringTokenizer類來讀取文本文件。在文本文件中,有一些double值。然而使用Java中的StringTokenizer解析雙變量時的精度錯誤

interest = Double.parseDouble(aString.nextToken()); 
System.out.println(interest); 

它顯示了罰款,在控制檯中,當我嘗試後打印出來,

System.out.println("Fixed Daily Interest = " + customers[i].get_interest() + "\n"); 

精密總是由一個小數點丟失。例如,其中一個值是0.055,當我在代碼的第一部分解析它後打印它時,它顯示的與控制檯中的完全相同。然而,在另一種方法中,試圖打印它給我0.05,不管我嘗試什麼,不將它解析爲雙變量,使用DecimalFormat等。任何善良的靈魂都會指導我在這裏犯的錯誤是什麼?我真的很困惑。

回答

1

您可以使用DecimalFormat來獲得Java的精度。

多讀一點發現這post這可能會給你一些指針。基本上,如果你需要更高的精度,你需要轉到一個專門設計的類來處理這個問題。這篇文章列出了幾個選項。

+0

是的,我試過了,但它不起作用。我將double值保存在一個對象數組中的變量中,會影響任何內容嗎? – Jason 2011-03-21 22:40:31

+0

嗨@Jason,做了一些更多的搜索和更新我的文章,可能會幫助你的文章。基本上你需要將你的數據類型從double改爲別的。 Java基元頁面特別建議不要在百分比中使用double。 – Rasika 2011-03-21 23:16:08

0

如果您需要額外的精度,請嘗試使用BigDecimal。如果問題是讀取一個double值,然後打印輸出一個不同的值,請記住二進制< - >十進制數表示法的問題。一些十進制數不能用二進制格式以有限的二進制精度表示。此外,在使用數字進行操作時,結果有時可能會以4,99997而不是十進制5打印,問題在於以二進制表示此數字。

確保數爲從未感動,然後打印它必須總是相同的,如果您在使用System.out.println("" + number);toString()直接輸出。