我需要根据货币代码显示符号和格式的货币金额。目前,我正在为每个货币代码使用默认区域设置,因为我无法访问确切的区域设置以及货币代码,并使用NumberFormat.format()
来获取格式和符号的格式化货币金额。 Joda
钱是否全部这样做 - 提供货币代码并显示带符号的格式化货币?任何关于此的帮助/指示都表示赞赏。
答案 0 :(得分:1)
我刚刚发现了joda-money,我正在测试它是否符合我的项目要求。我读了你的问题并决定在测试库时回答它。
对于我在joda-money jar中可以看到的内容,它只有很少的类,并提供基本的货币管理和格式化程序。
似乎在早期阶段,joda-money是格式化程序仍然需要Locale来打印货币符号,正如您在我的代码中看到的那样。 (代码在scala中,但方法调用在Java中是相同的)
import org.joda.money.format.MoneyFormatterBuilder
import org.joda.money.{Money, CurrencyUnit}
def formatterBuilder() = new MoneyFormatterBuilder().appendCurrencySymbolLocalized().appendAmount()
def moneyFormatter(locale: java.util.Locale) = formatterBuilder().toFormatter(locale)
def moneyFormatter() = formatterBuilder().toFormatter
val usd: CurrencyUnit = CurrencyUnit.of("USD")
val money = Money.of(usd, 23232312d) // or just Money.parse("USD 23232312")
moneyFormatter().print(money) // res0: String = USD23,232,312.00
moneyFormatter(java.util.Locale.US).print(money) // res1: String = $23,232,312.00
正如您所看到的,需要使用区域设置来打印' $'符号
此外,我尝试使用另一种货币日元(日本货币)。我用美国语言环境打印它,结果是我没有规范。
val japan = Money.parse("JPY 23232312")
moneyFormatter().print(japan) // res2: String = JPY23,232,312
moneyFormatter(java.util.Locale.JAPAN).print(japan) // res3: String = ¥23,232,312
moneyFormatter(java.util.Locale.US).print(japan) // res4: String = JPY23,232,312
编辑: 您还可以创建一个抽象类作为Money的包装器,如下所示:
abstract class Currency(amount: BigDecimal, locale: java.util.Locale) {
val currencyUnit: CurrencyUnit = CurrencyUnit.getInstance(locale)
val money: Money = Money.of(currencyUnit, amount)
def formatted: String = new MoneyFormatterBuilder().appendCurrencySymbolLocalized().appendAmount().toFormatter(locale).print(money)
// implement others Money methods
}
class USDollars(amount: BigDecimal) extends Currency(amount, java.util.Locale.US)
答案 1 :(得分:0)
public static void main(String[] args) throws Exception {
Currency usd = java.util.Currency.getInstance("USD");
NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US);
format.setCurrency(usd);
System.out.println(format.format(23232312));
}
<强>输出强>
$23,232,312.00