更改 DecimalFormat 语言环境
Posted
技术标签:
【中文标题】更改 DecimalFormat 语言环境【英文标题】:Change DecimalFormat locale 【发布时间】:2016-04-05 06:41:03 【问题描述】:我在 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 df = DecimalFormat.getInstance(Locale.US); 谢谢,但我如何使用这种模式的语言环境##.########? @Viren 尝试 DecimalFormat 格式化程序 = DecimalFormat.getInstance(Locale.US); formater.applyPattern("#.##"); 【参考方案1】:您可以通过这种方式为DecimalFormat
指定语言环境:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);
【讨论】:
应该被接受! 是的,应该是【参考方案2】:您可以尝试先转换为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);
【讨论】:
也在文档中。 docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html 这是 Java 的java.text.DecimalFormat
。问题是关于android的android.icu.text.DecimalFormat
。【参考方案3】:
您可以在创建 DecimalFormat 对象时使用基本构造函数来设置 Locale:
DecimalFormat dFormat = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));
【讨论】:
【参考方案4】:简单地使用这种方法来转换当前的本地化明智数字,
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;
或关注this link。
【讨论】:
【参考方案5】:如果你只想使用 NumberFormat,你可以这样做:
unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));
【讨论】:
【参考方案6】:您可以指定小数点后的小数位数,和/或小数点前的数字。当然,设置当前语言环境也很重要。
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;
【讨论】:
【参考方案7】:你可以像下面这样创建一个扩展函数
fun Double.toRate(): String?
val symbols = DecimalFormatSymbols(Locale.US)
val decimalFormat = DecimalFormat("##.######", symbols)
decimalFormat .minimumFractionDigits = 2
return decimalFormat .format(this)
谢谢
【讨论】:
以上是关于更改 DecimalFormat 语言环境的主要内容,如果未能解决你的问题,请参考以下文章
Java—NumberFormat与DecimalFormat类