2015-01-05 3 views
3

Когда я хочу, чтобы разобрать значения из массива строк в BigDecimal У меня есть эта ошибка:Как разобрать строку в BigDecimal без получения ошибки

Exception in thread "main" java.text.ParseException: Unparseable number: "86400864008640086400222" 

Я ищу в Интернете для решения, как это исправить. Может, вы, ребята, знаете?

Это была не моя идея использовать BigDecimal, но, к сожалению, мне нужно. Я основал некий код, который предполагается изменить значение из строки в BigDecimal и вернуть его:

public static BigDecimal parseCurrencyPrecise (String value) throws ParseException 
{ 
    NumberFormat format = NumberFormat.getCurrencyInstance(); 
    if (format instanceof DecimalFormat) 
     ((DecimalFormat) format).setParseBigDecimal (true); 

    Number result = format.parse (value); 
    if (result instanceof BigDecimal) 
     return (BigDecimal) result; 
    else { 
     // Oh well... 
     return new BigDecimal (result.doubleValue()); 
    } 
} 

Вот мой код при попытке разобрать:

public void Function() throws ParseException { 
    String [] array; 
    array=OpenFile().split("\\s"); 
    for(int i = 10 ;i < array.length; i+= 11) { 
     BigDecimal EAE = parseCurrencyPrecise(array[i]); 
     System.out.println(EAE); 
    } 
} 

функция OpenFile открыть файл с данными и прочитать таким образом, L temp + = line + ""; Вот почему я раскололся на \ s. Эта работа для меня со строками и целыми, но у меня проблема с BigDecimal.

Привет,

+0

Есть ли знак валюты для вашего региона перед действительно большим количеством? Я могу дублировать эту ошибку с помощью знака валюты, но она работает, когда я использую знак доллара (валюта для моей локали). – rgettman

+0

Что происходит с этим местным знаком? Сегодня я начал использовать BigDecimal, и я услышал статью о местных знаках. – Agnes

+0

Используйте 'BigDecimal.valueOf (result.doubleValue())' вместо 'new BigDecimal (result.doubleValue())'. – Tom

ответ

3

Вместо того, чтобы дело с разбора себя вы могли бы использовать в BigDecimal(String val) конструктора. Из Javadoc

BigDecimal(String val) 
Translates the string representation of a BigDecimal into a BigDecimal 

Например:

BigDecimal bigDecimal = new BigDecimal("86400864008640086400222"); 

Смотрите Javadoc для форматов конструктор принимает.

+0

Вы, ребята, Майк Кобит и Маркбернард прав, это отлично работает для меня тоже. Спасибо всем за помощь – Agnes

2

Есть ли причина, по которой вы не можете использовать конструктор? Похоже, вы делаете его более сложным, чем это должно быть. Это сработало для меня:

System.out.println(new BigDecimal("86400864008640086400222"));