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);

str假设用户可以自由输入任何字符串,这段代码中字符串类型变量的值可以是任何动态值。

倒数第二行Double.parseDouble()方法导致抛出 。java.lang.NumberFormatException

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

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

抑制异常。

那么,为什么它不工作呢?

4

2 回答 2

4

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

于 2013-02-11T09:12:26.650 回答
3

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

于 2013-02-11T09:12:03.500 回答