BigDecimal выдает NumberFormatException в Android 4.0.3 с локализацией

Я делаю локализацию в своем приложении с персидским (locale-"fa") и пушту (locale-"ps") языками. Когда я пытаюсь преобразовать двойное значение в BigDecimal с помощью Decimal Foramt, он дает NumberFormatException в 4.0.3 с персидский язык.

Ниже приведен мой код для получения двух знаков после запятой:

public static String roundTwoDecimals(double d) {

    System.out.println("===================Amount in double "+d);
    DecimalFormat twoDForm = new DecimalFormat("#############.##");
    String format=twoDForm.format(d);
    System.out.println("===================Amount after formatting "+format);
    return new BigDecimal(twoDForm.format(d)).toPlainString();
}

Логкат:

03-26 15:19:29.714: I/System.out(1475): ===================Amount in double 166308.37
03-26 15:19:29.723: I/System.out(1475): ===================Amount after formatting ۱۶۶۳۰۸٫۳۷

Фактическая сумма составляет 166308,37, и когда я меняю язык на персидский ("fa") и форматирую его, он дает сумму, подобную ۱۶۶۳۰۸٫۳۷ в 4.0.3. Таким образом, эта строка не может быть преобразована в BigDecimal и дает NumberFormatException.

И странная проблема в том, что кроме 4.0.3 она прекрасно работает.


person Kinjal Shah    schedule 26.03.2014    source источник
comment
При изменении локализации десятичный разделитель . меняется на , на некоторых языках. Вам нужно позаботиться об этом.   -  person Lucifer    schedule 26.03.2014
comment
Да, это хорошо... но как позаботиться об этой штуке. я уже пытался заменить функцию замены. to , но все же не заменяет его.   -  person Kinjal Shah    schedule 26.03.2014
comment
На каком устройстве вы его тестируете?   -  person Lucifer    schedule 26.03.2014
comment
Канва Micromax A110. ОС 4.0.3   -  person Nirav Bhandari    schedule 26.03.2014
comment
Да, вы правы, я запускал ваш код в 4.0.3 и 4.2, но в 4.0.3 он тоже выдавал эту ошибку.   -  person Lucifer    schedule 26.03.2014
comment
Сделайте что-нибудь нужное в этом... какие-нибудь предложения?   -  person Nirav Bhandari    schedule 26.03.2014
comment
@NiravBhandari, это твой вопрос или вопрос Кинджала?   -  person Lucifer    schedule 26.03.2014
comment
мы оба стараемся...   -  person Nirav Bhandari    schedule 26.03.2014
comment
@Kedarnath Да, мы оба пытаемся..   -  person Kinjal Shah    schedule 26.03.2014
comment
Теперь пытаемся втроем :)   -  person Lucifer    schedule 26.03.2014
comment
дайте нам какое-нибудь решение, кедарнатх... вы принадлежите к семье махадева... у вас должно быть какое-то решение.   -  person Nirav Bhandari    schedule 26.03.2014


Ответы (1)


Попробуйте этот код..

public static String roundTwoDecimals(double d) {

    NumberFormat nf=NumberFormat.getCurrencyInstance(Locale.ENGLISH);
    DecimalFormat df = (DecimalFormat)nf;
    df.applyPattern("#############.##");
    String output = df.format(d);

    return new BigDecimal(output).toPlainString();
}
person Nirav Bhandari    schedule 26.03.2014
comment
Хорошо, что ты сам нашел решение, Нирав :) - person Lucifer; 26.03.2014