Как определить разделитель группировки для анализа чисел BigDecimal в Camel Bindy?
У меня есть файл CSV, который содержит числа в этом формате: 1,234.56
с ,
будучи разделителем группировки и .
будучи десятичным разделителем. Я хотел бы проанализировать это число как BigDecimal с помощью Camel Bindy. Это часть класса модели для этого числа:
@DataField(pos = 6, required = true, precision = 2, pattern = "#,###.##")
public BigDecimal value;
Проблема сейчас в том, что это вызовет java.lang.NumberFormatException
хотя правильный шаблон был применен. Если я удаляю этот шаблон из аннотации и разделитель групп из числа в файле данных, то все работает нормально. Или если я использую Double
тип вместо BigDecimal
,
Документация Camel Bindy упоминает, что разделитель группировки для BigDecimal может быть установлен, но таблица под этой информацией говорит, что шаблон поддерживается только для десятичных чисел, а не для типа BigDecimal.
Также исходный код используемого класса FormatFactory показывает, что шаблон не будет использоваться для типов BigDecimal.
Итак, мой вопрос: как я могу установить и использовать разделитель группировки для типа BigDecimal, как указано в документации? Или это в настоящее время не поддерживается, и я должен использовать Double
вместо?
PS: локаль в настоящее время установлена на en_US
,
2 ответа
Эта функция была добавлена в Camel Bindy и может использоваться со следующими типами аннотаций:
@DataField(pos = x, precision = 2, pattern = "#,###.##")
private BigDecimal number;
или же:
@DataField(pos = x, precision = 2, pattern = "#,###.##", groupingSeparator = ",", decimalSeparator = ".")
private BigDecimal number;
Первая версия использует текущий набор Locale
значение. Если это не установлено, можно использовать вторую версию для указания собственной группировки и десятичных разделителей.
Обе версии могут анализировать числа, подобные этим:
1,000.00
-100
123,456,789.00
0,00
Я думаю, что первым выпуском, содержащим эту функцию, будет версия 2.14.0
,
Модель @DataField of Camel bindy предлагает точность параметров, например, шаблон, но не разделитель группировки для анализа данных в BigDecimal
пример
@DataField(pos = 2, precision = 2, pattern = "00.00")
private BigDecimal bigDecimal;
Разве шаблон не достаточно для вас?