2013-03-26 25 views
3

我使用的是Windows 7的機器,其「控制面板\時鐘,語言和區域」是「丹麥」Java掃描程序如何解析雙精度?

根據文檔的Scanner

掃描器的初始語言環境是價值由Locale.getDefault()方法返回;

但是當我運行的代碼:

System.out.println(Locale.getDefault()); 
Scanner sc = new Scanner("1.0"); 
sc.nextDouble(); 

它輸出 「EN_US」,然後在sc.nextDouble拋出一個java.util.InputMismatchException()。

Locale.setDefault(Locale.US); 
System.out.println(Locale.getDefault()); 
Scanner sc = new Scanner("1.0"); 
sc.nextDouble(); 

輸出「EN_US」,然後解析雙就好: 當掃描儀以「1,0」

初始化但是,如果我明確設置區域設置它的工作原理。我錯過了什麼,或者是掃描儀的文檔錯誤?

編輯根據@Perception的建議,我在第一個示例中查看了sc.locale()。它打印「da_DK」。那麼爲什麼它不是「en_US」,當Locale.getDefault()方法返回時呢?

+0

似乎你的電腦認爲它在法國或法國加拿大...... – 2013-03-26 17:40:28

+0

爲什麼會打印出'en_US'呢?但@AndrewMao一定是對的,它對我有用。 – 2013-03-26 17:40:42

+0

文檔的哪些部分是不可理解的? – 2013-03-26 17:43:35

回答

3

有兩種不同的Locale categories,一種用於顯示,一種用於格式。掃描儀使用Locale.getDefault(Locale.Category.FORMAT),但如果您撥打Locale.getDefault(),則會顯示區域設置。 setLocale(Locale)方法設置兩者。

+1

謝謝。我似乎無法在任何文檔中找到此說明(針對Scanner)。 – surlol 2013-03-26 18:58:33

+1

您好,官方的[JavaDoc](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#localized-numbers)有誤導性。甚至聲明'掃描器的初始語言環境是由Locale.getDefault()方法返回的值。 – s106mo 2013-03-26 19:48:20