2013-04-04 82 views
5

我不明白NumberFormat中的某些東西,它在美國語言環境中假設將逗號(「,」)作爲組分隔符處理 - 數以千計。Java NumberFormat忽略美國語言環境中的逗號?

它爲什麼忽略逗號在這個區域設置的錯誤位置?

NumberFormat format = DecimalFormat.getInstance(Locale.US); 
System.out.println(format.parse("5,500").longValue()); //5500 
System.out.println(format.parse("550,0").longValue()); //5500 
System.out.println(format.parse("5500,").longValue()); //5500 

任何其他的想法如何根據區域解析串地龍(asumming的是輸入「」不正確的地方的區域應該失敗 )?

+0

當你說*不正確的地方*時,你是什麼意思?你的例子中的所有語句都是有效的。 – 2013-04-04 11:18:42

+0

試試'format.setGroupingUsed(true)'。這有什麼不同嗎? – Puce 2013-04-04 11:24:25

+0

@Puce:'Locale.US'默認爲'true'。 – Keppil 2013-04-04 11:34:58

回答

0

逗號是分組分隔符的佔位符,並且週期爲小數分隔的佔位符。

NumberFormat format = DecimalFormat.getInstance(Locale.US); 
System.out.println(format.parse("5.500").longValue()); //5 
System.out.println(format.parse("55.00").longValue()); //55 
System.out.println(format.parse("550.0").longValue()); //550 

從演示文稿中忽略逗號。用於數千的合同很常見,但在解析過程中沒有任何表示。這就是爲什麼它被稱爲分組分隔符不是千位分隔符。你可能有類似5,5.0,0,,它仍然有效。

如何數字分組可能不同,有時是由3位數字一段時間由2或組合。

從邏輯上講,如果它只是用於簡化人類閱讀的分隔符。他的位置不會改變所呈現的數字的價值,因此可以省略。


由Oracle實現java.text.DecimalFormat類的分析表明,該分組字符被忽略。

1526 // Ignore grouping characters, if we are using them, but 
1527 // require that they be followed by a digit. Otherwise 
1528 // we backup and reprocess them. 

有關詳情,請訪問Formatting Numeric Print Output

+1

他在該問題時這一點,我認爲他想解析如果逗號是要失敗錯誤的地方。 – Keppil 2013-04-04 11:03:58

+0

他不想那樣,他確實想知道什麼不會落下。我已經添加了一些評論。 – 2013-04-04 11:18:25

+0

正如Keppil所說的,如果分組不正確(取決於語言環境) - 如果可能的話 – Yoni 2013-04-04 11:53:20

-1

由於逗號是爲成千上萬在美國地區,當它被錯誤地把它放在被忽略的分隔符。 所有這些的OUPUTS將打印5500

+1

他在問題中陳述了這一點,我認爲他希望解析失敗,如果逗號在錯誤的地方。 – Keppil 2013-04-04 11:06:16

0

由於javadev提到,解析方法只是似乎忽略千個分隔符。我想你必須自己實現一個解析方法(使用NumberFormat/DecimalFormat的信息),如果你想嚴格解析。