Change DecimalFormat locale

前端 未结 6 1225
面向向阳花
面向向阳花 2020-12-14 07:02

I have custom DecimalFormat in Edittext\'s addTextChangedListener method, everything is working perfectly but when I change language (locale) my addTextChanged

相关标签:
6条回答
  • 2020-12-14 07:46

    You can specify the number of fraction digit after the decimal point, and/or the numbers before the decimal point. Of-course, setting the current locale is also important.

       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;
    }
    
    0 讨论(0)
  • 2020-12-14 07:49

    if you want to use only NumberFormat, you can do this way:

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

    0 讨论(0)
  • 2020-12-14 07:54

    You may try by first converting to NumberFormat and then Cast it to DecimalFormat

    Integer vc = 3210000;
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
    DecimalFormat formatter = (DecimalFormat) nf;
    formatter.applyPattern("#,###,###");
    String fString = formatter.format(vc);
    return convertNumbersToEnglish(fString);
    
    0 讨论(0)
  • 2020-12-14 07:54

    Use simply this method to convert current localization wise number,

    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;
        }
    }
    

    or follow this link.

    0 讨论(0)
  • 2020-12-14 07:55

    You can also specify locale for DecimalFormat this way:

    DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
    DecimalFormat format = new DecimalFormat("##.########", symbols);
    
    0 讨论(0)
  • 2020-12-14 08:00

    You can use basic constructor for setting Locale while creating DecimalFormat object:

    DecimalFormat dFormat = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));
    
    0 讨论(0)
提交回复
热议问题