【问题标题】:Change DecimalFormat locale更改 DecimalFormat 语言环境
【发布时间】: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("#.##");

标签: java android bigdecimal decimalformat


【解决方案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);

【讨论】:

【解决方案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)
              }
          

          谢谢

          【讨论】: