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);
しかし、私はこのコードの使い方を知りません。
最初に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);
この方法でDecimalFormat
のロケールを指定することもできます:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);
小数点以下の桁数や小数点前の数値を指定できます。もちろん、現在のロケールを設定することも重要です。
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;
}
numberFormatのみを使用する場合は、次のようにできます。
unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));
このメソッドを使用して、現在のローカライズに関する数値を変換します。
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;
}
}
または このリンク に従ってください。
DecimalFormatオブジェクトの作成中にロケールを設定するための基本的なコンストラクターを使用できます。
val dFormat = DecimalFormat("#.#", DecimalFormatSymbols(Locale.ENGLISH))