2017-02-23 81 views
1

我正在學習Java,並且學習了關於不同Java實用程序和數字格式的教程。但是,我的格式與本書中應該說的不一樣。我的代碼如下所示:DecimalFormat在Java中沒有給出正確的輸出

import java.text.NumberFormat; 
import java.text.DecimalFormat; 

public class Lessons { 

public static void main(String[] args) { 

    double d = 7.1348759272948202842847; 

    System.out.printf("%15e %n", d); 

    NumberFormat cashFormat = NumberFormat.getCurrencyInstance(); 

    System.out.println(cashFormat.format(d)); 

    double e = 14.9; 
    double f = 16.09805938020001; 
    double g = 12346; 

    DecimalFormat Dec_Format = new DecimalFormat("##0.##E0"); 

    System.out.println(Dec_Format.format(e)); 
    System.out.println(Dec_Format.format(f)); 
    System.out.println(Dec_Format.format(g)); 
} 

在書中例子,它說,12345格式化 「## 0 ## E0」 是 「12.3E3」。我收到的輸出是「12.345E3」。

我收到的輸出很有意義,但由於它與書不匹配,我不確定這是書中的錯誤還是錯誤。

這是正常的輸出嗎?

回答

0

您正在使用打印12.3E3的格式不正確這樣反而:

DecimalFormat Dec_Format = new DecimalFormat("##0.##E0"); 

,你應該使用:

DecimalFormat Dec_Format = new DecimalFormat("##0.E0"); 

這將告訴你:

7,134876e+00 
7,13 € 
14,9E0 
16,1E0 
12,3E3//<----------------- 
+0

我懂了。我正確理解了現金格式化部分,但是由於本書顯示的方式,科學記數法沒有多大意義。如果我正確理解你的例子,Java的e標記將默認爲一位小數,而不必指定,所以當我添加##時,它會在結尾添加兩個數字(如果可用)。 (即## 0.E0 = 12.3,而## 0。## E0 = 12.345E3)這將比書中的措辭/格式更有意義。 – AdamWestPhD

+0

是嗎?這是什麼意思我的解決方案是錯誤的@AdamWestPhD :) –

+0

它看起來像它的作品:)感謝您的幫助 – AdamWestPhD