我在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);
但我不知道如何使用这个代码。
您可以通过以下方式指定DecimalFormat
的区域设置:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);
您可以尝试先转换为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对象时使用基本构造函数来设置Locale:
DecimalFormat dFormat = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));
您可以创建一个扩展函数,如下面的
fun Double.toRate(): String? {
val symbols = DecimalFormatSymbols(Locale.US)
val decimalFormat = DecimalFormat("##.######", symbols)
decimalFormat .minimumFractionDigits = 2
return decimalFormat .format(this)
}
感谢
只需使用此方法即可转换当前本地化数字
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;
}
}
或点击此链接。
如果只想使用NumberFormat,可以这样做:
unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));
您可以指定小数点后的小数位数和/或小数点前的数字。当然,设置当前的区域设置也很重要。
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;
}