2016-10-17 2 views
2

У меня есть строка, которая является «R $ 3.333,33», и я пытаюсь разобрать его к двойному значению с этим методом:Синтаксических валют в два раз повысить исключение

public static BigDecimal parse(final String amount, final Locale locale) throws ParseException { 
     final NumberFormat format = NumberFormat.getCurrencyInstance(locale); 
     if (format instanceof DecimalFormat) { 
      ((DecimalFormat) format).setParseBigDecimal(true); 
     } 
     return (BigDecimal) format.parse(amount.replaceAll("[^\\d.,]", "")); 
    } 

Но я получаю исключение, которое говорит:

W/System.err: java.text.ParseException: Unparseable number: "3.333,33" (at offset 8) 

И я использую это нравится:

Ferramentas.parse(value.getText().toString(), Locale.FRANCE) 
+0

Какой язык вы используете? – m0skit0

+0

@ m0skit0 Я использую Locale.FRANCE – AND4011002849

+1

Возможный дубликат [Конвертирование валюты разных стран в двойное использование java] (http://stackoverflow.com/questions/23990805/converting-different-countrys-currency-to-double-using -java) –

ответ

2

Единственное решение, которое я нашел, чтобы заменить . в своем регулярном выражении, а также:

return (BigDecimal) format.parse(amount.replaceAll("[^\\d,]","")); 

Я не смог разобрать число с помощью . для тысяч.

  • Если вы держите ., он разобран 3.
  • Если вы замените . на ,, он разобран на 3.333.

Если у кого-то есть решение для . для тысяч, мне было бы очень интересно его услышать.

0

Посмотрите на this question and answer.

Хотя это похоже на дубликат, метод parse работает, если ваш ввод «R $ 3.333,33» (обратите внимание на пробел между символом валюты и значением).

Чтобы вставить пробел между символом валюты и стоимости, вы можете использовать метод, как это:

public static String insertSpaceBetweenSymbolAndValue(String s) 
{ 
    int index = 0; 
    while (index < s.length() && !Character.isDigit(s.charAt(index))) 
     index++; 
    return (index != s.length()) ? s.substring(0, index) + " " + s.substring(index) : s; 
} 
+0

Как я могу поместить это пространство между значением и символом? – AND4011002849

+0

@ AND4011002849 Отредактировал мой ответ, чтобы включить такой метод. –

+0

Все работает отлично от этого ответа, пока вы не добавите '.' для тысяч. – m0skit0

-2

Почему бы вам не удалить «R $», а затем разобрать свой двойной?

String s = b.substring(3, b.length()); 
Double d = Double.valueOf(s); 
+1

Он уже удаляет R $: 'amount.replaceAll (" [^ \\ d.,] "," ")'. – m0skit0

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