更改 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。问题是关于androidandroid.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类

double 类型转化为Integer类型 ---DecimalFormat

DecimalFormat格式化十进制数字

Java DecimalFormat的主要功能及使用方法

Java 程序在 jpackage 时使用了错误的语言环境

如何使用 DecimalFormat 方法更改小数点前数字的大小