Android 返回不同货币符号的货币格式

Android currency format returning different currency symbol

我正在尝试在我的文本编辑器中设置货币格式。我写了一些代码,但遇到了问题。 NumberFormat return在不同的设备上使用不同的货币符号。

这是我的源代码:

    final NumberFormat nf = NumberFormat.getInstance(Locale.US);
    transfer_maney.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            if (!s.toString().equals(current)) {
                transfer_maney.removeTextChangedListener(this);

                String cleanString = s.toString().replaceAll("[$,.]", "");


                double parsed = Double.parseDouble(cleanString);
                String formatted = nf.getCurrencyInstance().format((parsed / 100));
                current = formatted;

                if (formatted.contains("$")) {
                    formatted = formatted.replace("$", "");
                }
                transfer_maney.setText(formatted);
                transfer_maney.setSelection(formatted.length());

                transfer_maney.addTextChangedListener(this);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

我的目标是总是 return $ 符号然后删除它。正如我所说,在不同的设备上我有不同的符号。在某些设备上,我得到一个 $ 符号,在某些 £ 符号上。我应该在我的代码中更改什么,以便它总是 return 美元符号 ($) 以便我可以删除它?

我尝试更改 Locale 但它不起作用。如果有人知道解决方案请帮助我。

谢谢大家

问题是您使用的静态方法 NumberFormat.getCurrencyInstance() 是这样工作的:

public final static NumberFormat getCurrencyInstance() {
    return getInstance(Locale.getDefault(Locale.Category.FORMAT), CURRENCYSTYLE);
}

如您所见,它 returns 是一个具有默认值 LocaleNumberFormat 对象,而不是您正在设置的 Locale。这意味着它取决于用户设备设置。


因此,与其在默认为 Locale 的静态返回实例上调用 format

nf.getCurrencyInstance().format(parsed / 100);

实际上等同于:

NumberFormat.getCurrencyInstance().format(parsed / 100);

您的实例与设置的Locale一起使用:

final NumberFormat nf = NumberFormat.getInstance(Locale.US);
String formatted = nf.format(parsed / 100);