Деньги Joda: как преобразовать форматированную строку обратно в денежное значение (независимо от локали)

Предположим, у нас есть сумма $12345,67.

Это можно преобразовать в денежное значение, используя библиотеку денег joda с помощью:

      Money parsed = Money.parse("USD 12345.67");

//Now to display the amount according to the users locale we use:
MoneyFormatter mf =  MoneyFormatterBuilder().appendAmountLocalized().toFormatter();
String localeString = mf.withLocale(Locale.getDefault()).print(parsed);

//Now assume the user is for example in Europe so the locale string would be 12.345,46
//Now assume he changes the amount inside a textfield to 12.345,47
Money changed = /*parse 12.345,47 (USD)*/

Вопрос в том, как я могу проанализировать локализованную строку обратно в денежное значение (обратите внимание на цифру группировки, которая представляет собой точку, а цифра дроби - запятая). Это также должно работать с каждым денежным значением и каждой строкой, которая выходит из вышеуказанного средства форматирования.

Money.parse()работает только с этим регулярным выражением, которое не соответствует требованиям [+-]?[0-9]*[.]?[0-9]*

1 ответ

Хорошо. Понятно. Вы можете использовать MoneyFormatter наоборот. Документация была немного неясной

      MoneyFormatter mf =  MoneyFormatterBuilder().appendAmountLocalized().toFormatter()
MoneyParseContext parsed = mf.withLocale(Locale.getDefault()).parse(amount,0);
parsed.setCurrency(currency);
Money money = Money.of(parsed.toBigMoney());
Другие вопросы по тегам