2016-01-25 3 views
-1

Вот мой код:Java - Почему я получаю null при попытке 9999999999999 в BigDecimal?

String value = "9999999999999"; 
Character decimalFormat = '.'; 
DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
symbols.setDecimalSeparator(decimalFormat); 
symbols.setGroupingSeparator(decimalFormat.equals('.') ? ',' : '.'); 
DecimalFormat format = new DecimalFormat(); 
format.setDecimalFormatSymbols(symbols); 
format.setParseBigDecimal(true); 
ParsePosition parsePosition = new ParsePosition(0); 
BigDecimal result = (BigDecimal) format.parse(value, parsePosition); 

Когда я прохожу 9999999999999 или 999999999999.999999999 как «ценность» в этом коде я получаю пустой. Зачем?

+0

Какова ценность decimalFormat? – hasnae

+0

Где вы получаете нуль? Если вы распечатываете объект результата, не дает ли вам правильного значения? – Bifz

+0

Я получаю: result = null – goe

ответ

2

1 Это работает отлично, и даже если вы поставите плохого номера с буквами внутри, вы получите начало.

2 за исключением случаев, когда ваша строка начинается с буквы: X999 дает вам null, или недействителен.

3A Поэтому я подозреваю, что есть другой код, который изменяет значение.

или

3B Вы не можете использовать обычные библиотеки (импорт java.text ...)

4 Последний метод: отслеживать каждый вызов.

, что делает синтаксический анализ:

Метод пытается разобрать текст, начиная с индекса, заданной поз. Если синтаксический анализ завершается успешно, то индекс pos обновляется до индекса после использования последнего символа (разбор не обязательно использует все символы до конца строки), и парсированный номер возвращается. Обновленный pos может использоваться для указания начальной точки для следующего вызова этого метода. Если возникает ошибка, индекс pos не изменяется, индекс ошибки pos устанавливается в индекс символа, в котором произошла ошибка, и возвращается null.

Смежные вопросы