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 是一个具有默认值 Locale
的 NumberFormat
对象,而不是您正在设置的 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);
我正在尝试在我的文本编辑器中设置货币格式。我写了一些代码,但遇到了问题。 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 是一个具有默认值 Locale
的 NumberFormat
对象,而不是您正在设置的 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);