Android有ICU库NumberFormat,它允许以不同的方式格式化货币,在我的特定情况下,我需要它作为ISOCURRENCYSTYLE
。这工作很好,但只在Android上工作。
Java作为其自己的NumberFormat实现,带有一个名为getCurrencyInstance
的示例构建器,该构建器在内部使用默认货币样式,并且不允许指定它。
其中的一些差异包括:
BE_FR | Android: 123,12 EUR | Java: 123,12 €
BE_NL | Android: EUR 123,12 | Java: € 123,12
BE_EN | Android: EUR 123.12 | Java: €123,12
GE_GE | Android: EUR 123.12 | Java: €123.12
FR_FR | Android: 123,12 EUR | Java: 123,12 €
有没有办法只在JVM中获得相同的Android输出,而不使用任何外部库?
2条答案
按热度按时间6kkfgxo01#
一种解决方案是将
DecimalFormat
的前缀和后缀替换为货币代码:输出量:
yftpprvb2#
不幸的是,你可以使用
Currency
和手工制作的东西来获得三个字母的ISO 4217代码,比如:但是,Android使用ICU代码来正确排序货币字符串中的值和单位,这在标准Java JDK中是不存在的。
我知道您不想使用库,因此这超出了要求回答的范围。但是,如果您选择使用库,请查看ICU4J https://unicode-org.github.io/icu/userguide/icu4j/。它包含
NumberFormat
,其中ISOCURRENCYSTYLE
符合Android行为。