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("#.##");
抑制異常。
那麼,爲什麼它不工作呢?
輸入字符串爲'123456.7855456677'。 – Tiny 2013-02-11 09:14:40
輸入字符串是'numberFormat.format(number)' – 2013-02-11 09:15:54
由String類型變量'str'保存的原始字符串'123456.7855456677'在解析爲Double之前表示爲Number。 – Tiny 2013-02-11 09:17:53