1

通貨コードに基づいた記号と形式で通貨金額を表示する必要があります。現在、通貨コードと一緒に正確なロケールにアクセスできないため、通貨コードごとにデフォルトのロケールを使用しておりNumberFormat.format()、フォーマットと記号でフォーマットされた通貨量を取得するために使用しています。お金はこれをすべて行いますか?Joda通貨コードを提供し、フォーマットされた通貨を記号で表示しますか? これに関するヘルプ/指示をいただければ幸いです。

4

2 に答える 2

2

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

ご覧のとおり、「$」記号を出力するには Locale が必要です。

さらに、別の通貨である円(日本の通貨)も試してみました。私はそれを US ロケールで印刷しました。

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)
于 2015-02-03T23:18:21.650 に答える
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
于 2014-11-18T07:38:21.557 に答える