Как определить разделитель группировки для анализа чисел 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;

Разве шаблон не достаточно для вас?

Другие вопросы по тегам