I have custom DecimalFormat
in Edittext\'s addTextChangedListener method, everything is working perfectly but when I change language (locale) my addTextChanged
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;
}
if you want to use only NumberFormat, you can do this way:
unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));
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);
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.
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));