更改DecimalFormat区域设置

时间:2016-04-05 06:41:03

标签: java android bigdecimal decimalformat

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

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

6 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:22)

您可以尝试首先转换为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 :(得分:1)

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

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

答案 3 :(得分: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;
    }
}

或跟随this link

答案 4 :(得分:0)

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

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

答案 5 :(得分: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;
}