I have custom DecimalFormat
in Edittext's addTextChangedListener method, everything is working perfectly but when I change language (locale) my addTextChangedListener is not working.
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)));
I searched about my problem and found a NumberFormat
solution:
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.US);
but I don't know how I can use this code.
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);
You can also specify locale for DecimalFormat
this way:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);
You can use basic constructor for setting Locale while creating DecimalFormat object:
DecimalFormat dFormat = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));
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.
if you want to use only NumberFormat, you can do this way:
unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));
来源:https://stackoverflow.com/questions/36418901/change-decimalformat-locale