解析数字时出现NumberFormatException

时间:2013-02-11 09:07:54

标签: java numberformatexception

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的值可以是任何动态值,假设用户可以自由输入任何字符串。

第二行最后一行上的Double.parseDouble()方法会导致java.lang.NumberFormatException被抛出。

删除行numberFormat.setMaximumFractionDigits(2);并将RegEx设置为DecimalFormat类的重载构造函数,而不是像往常一样,

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

禁止例外。

那么,为什么它不起作用?

2 个答案:

答案 0 :(得分:4)

如果您可以调试代码,那么请查看此行numberFormat.format(number)的放置,它会给出一个包含可能成为异常原因的逗号的数字,请检查此123,456.79并且此逗号不应该存在。希望这会有所帮助。

答案 1 :(得分:3)

Exception in thread "main" java.lang.NumberFormatException: For input string: "123,456.79" 你不能在双数字的字符串表示中包含逗号。