4

我正在使用非英语语言环境的设备,英语货币格式如下:

1 美元

如果我有英语语言环境,我会得到欧元货币,例如:

1欧元

使用

format.setCurrency(Currency.getInstance(currency));
return format.format(amount);

在文档中找到:

http://developer.android.com/reference/java/util/Currency.html#getSymbol ()

在语言环境中返回此货币的本地化货币符号。也就是说,给定“USD”和 Locale.US,你会得到“$”,但给定“USD”和非美国语言环境,你会得到“US$”。

如果 locale 只指定一种语言而不是语言和国家(例如 Locale.JAPANESE 或 {new Locale("en", "")} 而不是 Locale.JAPAN 或 {new Locale("en", "US" )}),返回 ISO 4217 货币代码。

如果没有特定于区域设置的货币符号,则返回 ISO 4217 货币代码。

不是同一种方法,但可能相关。为什么我的设备语言环境对以货币排序的符号有影响?无论我使用哪种语言环境,1$ 都是不正确的。

有没有办法改变这个?

4

1 回答 1

3

该方法的行为是正确的。

并非所有国家/地区都希望在金额之前使用货币符号。

如果您总是希望货币格式与美国化的期望相匹配,请将语言环境保留为Locale.US. 如果您希望货币以本地化方式显示,请保持您的实现不变。

请参阅此简短指南(来自 Microsoft,不少于):

货币格式

我猜您可能想要实现的是以适合其语言环境的格式显示货币?如果是这种情况,只需将语言环境与您使用的货币匹配,然后再调用该方法。

请注意,格式甚至可以在同一个国家/地区有所不同。在加拿大,说英语的人使用 $50.00 的格式是相当普遍的,而法语加拿大人可能使用 50,00 $。

另请参阅有关 UX 的这个问题:

https://ux.stackexchange.com/questions/22574/where-to-place-currency-symbol-when-localizing-and-what-to-do-with-odd-symbols

于 2012-09-19T08:21:09.633 回答