2015-07-07 3 views
3

Я хотел бы проанализировать десятичные числа в Java со знаком плюс, знак минус или без знака и получить экземпляр BigDecimal. Это может быть достигнуто просто путем вызова конструктора new BigDecimal(string). Он производит соответствующие результаты для всех из следующих строк:Необязательный знак плюс с java.text.DecimalFormat

"1", "12", "123", "123.0", "+123.0", "-123.0", "+123", "-123" 

Тем не менее, мне нужно, чтобы разобрать строки в соответствии конкретного языкового стандарта, то есть с запятой десятичного разделителя. Есть ли способ разобрать все эти цифры по отношению к определенному языку?

Я пробовал NumberFormat и DecimalFormat, но не могу настроить его соответствующим образом.

final DecimalFormat valueParser = (DecimalFormat) NumberFormat.getNumberInstance(new Locale("cs")); 
valueParser.setParseBigDecimal(true); 

valueParser не принимает знак «плюс». Существует возможность установить шаблон на DecimalFormat. Однако может ли знак плюса указываться как необязательный в шаблоне?

+0

Пожалуйста, ознакомьтесь с этим вопросом: http://stackoverflow.com/questions/12836647/best-way-to-convert-locale-specific-string-to-bigdecimal – Garry

+0

@Garry В предлагаемом вопросе stackoverflow 'NumberFormat'/Используется 'DecimalFormat'. Однако необязательный знак плюс не рассматривается. – Cimlman

+0

В чем разница между знаками с плюсом и без знака? – Garry

ответ

3

Вы можете создать DecimalFormat, который принимает или лучше требует ведущего "+".

DecimalFormat f (DecimalFormat)NumberFormat.getNumberInstance(new Locale(...)); 
    f.setPositivePrefix("+"); 
    f.parse("+123"); 

Однако префикс не опциональный поэтому он не поможет вашему делу. Как очень простое решение, почему бы вам не проверить строку (обрезанной), если она начинается с символа «+», и в этом случае разрезать ведущую «+», прежде чем передать строку методу анализа DecimalFormats.

+2

oh the suckers, почему формат от 0 до «+0», 0 не является ни положительным, ни отрицательным числом – headsvk

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