web-dev-qa-db-ja.com

DecimalFormatロケールを変更する

EdittextのaddTextChangedListenerメソッドにカスタムDecimalFormatがありますが、すべてが完全に機能していますが、言語(ロケール)を変更すると、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);

しかし、私はこのコードの使い方を知りません。

19
BekaKK

最初に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);
20
Faisal Naseer

この方法でDecimalFormatのロケールを指定することもできます:

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

小数点以下の桁数や小数点前の数値を指定できます。もちろん、現在のロケールを設定することも重要です。

   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

numberFormatのみを使用する場合は、次のようにできます。

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

0

このメソッドを使用して、現在のローカライズに関する数値を変換します。

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

または このリンク に従ってください。

0
Nazmus Saadat

DecimalFormatオブジェクトの作成中にロケールを設定するための基本的なコンストラクターを使用できます。

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