Изменить локаль DecimalFormat

У меня есть пользовательский DecimalFormat в методе addTextChangedListener Edittext, все работает отлично, но когда я меняю язык (локаль), мой addTextChangedListener не работает.

double answer = inputDouble * counterToDouble;
DecimalFormat df = new DecimalFormat("##.########");
// df=(DecimalFormat)numberFormat;

df.setRoundingMode(RoundingMode.DOWN);
answer = Double.parseDouble(df.format(answer));

unicoinsAmmount.setText(String.valueOf(df.format(answer)));

Я искал информацию о своей проблеме и нашел NumberFormat решение:

NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.US);

но я не знаю, как я могу использовать этот код.


person BekaKK    schedule 05.04.2016    source источник
comment
Попробуйте DecimalFormat df = DecimalFormat.getInstance(Locale.US);   -  person    schedule 05.04.2016
comment
спасибо, но как я могу использовать локаль с этим шаблоном ##.########? @Вирен   -  person BekaKK    schedule 05.04.2016
comment
Попробуйте средство форматирования DecimalFormat = DecimalFormat.getInstance(Locale.US); formater.applyPattern(#.##);   -  person    schedule 05.04.2016


Ответы (6)


Вы можете попробовать сначала преобразовать его в NumberFormat, а затем преобразовать в DecimalFormat.

Integer vc = 3210000;
NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
DecimalFormat formatter = (DecimalFormat) nf;
formatter.applyPattern("#,###,###");
String fString = formatter.format(vc);
return convertNumbersToEnglish(fString);
person Faisal Naseer    schedule 11.06.2017
comment
Также в документации. docs.oracle.com/javase/tutorial/i18n/format/decimalFormat. html - person OneCricketeer; 11.06.2017

Вы также можете указать локаль для DecimalFormat следующим образом:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);
person Joe Bloggs    schedule 06.06.2018
comment
должен быть ПРИНЯТЫЙ ответ! - person Xan; 11.10.2018

Вы можете использовать базовый конструктор для установки Locale при создании объекта DecimalFormat:

DecimalFormat dFormat = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));
person Sasha Balyas    schedule 12.02.2019

Просто используйте этот метод, чтобы преобразовать текущий номер локализации,

public static String currencyFormatter(String balance) {
    try {
        double amount = Double.parseDouble(balance);
        DecimalFormat decimalFormat = new DecimalFormat("##,##,##,###.##");
        DecimalFormat locationSpecificDF = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            locationSpecificDF = (DecimalFormat) DecimalFormat.getNumberInstance(Locale.forLanguageTag("bn")); // Ex. en, bn etc.
        } else {
            return decimalFormat.format(amount);
        }
        return locationSpecificDF.format(amount);
    } catch (Exception e) {
        return balance;
    }
}

или перейдите по этой ссылке.

person Nazmus Saadat    schedule 18.09.2018

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

unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));

person androidcodetowin    schedule 27.11.2018

Вы можете указать количество знаков дроби после запятой и/или числа до запятой. Конечно, установка текущей локали также важна.

   private String formatNumber(double number) {

    NumberFormat nf = NumberFormat.getNumberInstance(Locale.getDefault());
    if (nf instanceof DecimalFormat) {
        try {
            DecimalFormat formatter = (DecimalFormat) nf;
            formatter.setDecimalSeparatorAlwaysShown(true);
            formatter.setMinimumFractionDigits(2);
            formatter.setMaximumFractionDigits(2);
            return formatter.format(new BigDecimal(number);
        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
        }
    }
    return null;
}
person technik    schedule 19.01.2020