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("#.##");
禁止例外。
那么,为什么它不起作用?
答案 0 :(得分:4)
如果您可以调试代码,那么请查看此行numberFormat.format(number)
的放置,它会给出一个包含可能成为异常原因的逗号的数字,请检查此123,456.79
并且此逗号不应该存在。希望这会有所帮助。
答案 1 :(得分:3)
Exception in thread "main" java.lang.NumberFormatException: For input string: "123,456.79"
你不能在双数字的字符串表示中包含逗号。