2013-02-11 56 views
2
String str="123456.7855456677"; 
ParsePosition parsePosition = new ParsePosition(0); 
NumberFormat numberFormat=new DecimalFormat(); 
Number number=numberFormat.parse(str, parsePosition); 

if(parsePosition.getIndex()!=str.length()) 
{ 
    throw new IllegalArgumentException(); 
} 

numberFormat.setMaximumFractionDigits(2); 
numberFormat.setRoundingMode(RoundingMode.HALF_UP); 
double value=Double.parseDouble(numberFormat.format(number)); 
System.out.println(value); 

String類型在該段的代碼可以是任何動態值變量str的值,假設一個用戶可以自由地輸入任何字符串。NumberFormatException的同時解析數

Double.parseDouble()方法倒數第二行導致java.lang.NumberFormatException被拋出。

卸下線numberFormat.setMaximumFractionDigits(2);和一個正則表達式設定爲DecimalFormat類的重載的構造,而不是像往常一樣等,

NumberFormat numberFormat=new DecimalFormat("#.##"); 

抑制異常。

那麼,爲什麼它不工作呢?

回答

4

如果你可以調試代碼,然後檢查出這條線numberFormat.format(number)它提供了一個包含逗號可能成爲例外的原因的數字,檢查這個123,456.79,這個逗號應該不存在...希望這會有所幫助。

+0

輸入字符串爲'123456.7855456677'。 – Tiny 2013-02-11 09:14:40

+1

輸入字符串是'numberFormat.format(number)' – 2013-02-11 09:15:54

+0

由String類型變量'str'保存的原始字符串'123456.7855456677'在解析爲Double之前表示爲Number。 – Tiny 2013-02-11 09:17:53

3

Exception in thread "main" java.lang.NumberFormatException: For input string: "123,456.79" 你不能有雙號的字符串表示內一個逗號。

+0

但輸入字符串是'123456.7855456677'。 – Tiny 2013-02-11 09:15:13

+1

'Double.parseDouble'函數的輸入是'numberFormat.format(number)'的結果,它是'123,456.79',其中包含逗號並導致異常 – 2013-02-11 09:17:52

相關問題