web-dev-qa-db-fra.com

Modifier les paramètres régionaux DecimalFormat

J'ai personnalisé DecimalFormat dans la méthode addTextChangedListener d'Edittext, tout fonctionne parfaitement mais quand je change de langue (locale) mon addTextChangedListener ne fonctionne pas.

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

J'ai recherché mon problème et trouvé une solution NumberFormat:

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

mais je ne sais pas comment utiliser ce code.

19
BekaKK

Vous pouvez essayer de convertir d'abord en NumberFormat puis de le convertir en DecimalFormat

Integer vc = 3210000;
        NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
        DecimalFormat formatter = (DecimalFormat)nf;
        formatter.applyPattern("#,###,###");
        String fString = formatter.format(vc);
        return convertNumbersToEnglish(fString);
20
Faisal Naseer

Vous pouvez également spécifier les paramètres régionaux pour DecimalFormat de cette façon:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);
16
Joe Bloggs

Vous pouvez spécifier le nombre de chiffres de fraction après le point décimal et/ou les nombres avant le point décimal. Bien sûr, la définition des paramètres régionaux actuels est également importante.

   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
technik

si vous souhaitez utiliser uniquement NumberFormat, vous pouvez procéder de la manière suivante:

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

0
androidcodetowin

Utilisez simplement cette méthode pour convertir le nombre actuel de localisation,

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

ou suivez ce lien .

0
Nazmus Saadat

Vous pouvez utiliser le constructeur de base pour définir les paramètres régionaux lors de la création d'un objet DecimalFormat:

val dFormat = DecimalFormat("#.#", DecimalFormatSymbols(Locale.ENGLISH))
0
Sasha Balyas