更改 DecimalFormat 区域设置

62

我在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);

但我不知道如何使用这段代码。


1
尝试使用 DecimalFormat df = DecimalFormat.getInstance(Locale.US); - user4584887
谢谢,但我该如何在这个模式##.########中使用本地化?@Viren - BekaKK
尝试使用DecimalFormat formater = DecimalFormat.getInstance(Locale.US); formater.applyPattern("#.##"); - user4584887
7个回答

136

您可以通过以下方式为DecimalFormat指定区域设置:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat format = new DecimalFormat("##.########", symbols);

12
应该接受这个答案! - Alessandro Scarozza
是的,它应该是这样的。 - Abhijith Brumal

50

您可以尝试将其首先转换为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);

2
还有在文档中。https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html - OneCricketeer
那是Java的java.text.DecimalFormat。问题是关于Android的android.icu.text.DecimalFormat - Agent_L

26

您可以在创建DecimalFormat对象时使用基本构造函数来设置Locale:

DecimalFormat dFormat = new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));

1
您可以创建以下类似的扩展函数。
 fun Double.toRate(): String? {
        val symbols = DecimalFormatSymbols(Locale.US)
        val decimalFormat = DecimalFormat("##.######", symbols)
        decimalFormat .minimumFractionDigits = 2
        return decimalFormat .format(this)
    }

谢谢


0
使用这个简单的方法来转换当前本地化数值:
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;
    }
}

或者关注这个链接


0

如果你想只使用NumberFormat,可以这样做:

unicoinsAmmount.setText(NumberFormat.getNumberInstance(Locale.US).format(vc));


0

您可以指定小数点后的位数和/或小数点前的数字。当然,设置当前区域设置也很重要。

   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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接