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("#.##");
подавляет исключение.
Так почему иначе не работает?