5

我有一个下游服务(Stripe),它要求我以最小的货币单位(他们的文档中的零十进制货币)发送货币。即收取 1 美元我会发送 { "currency": "USD", amount: 100 } 并收取 ¥100 我会发送 { "currency": "YEN", amount: 100 }

我的上游应用程序不想以这种方式处理货币并希望使用标准货币格式。有没有办法转换javax.money.MonetaryAmount成零十进制货币格式?

还是我必须手动编写转换?

4

1 回答 1

0

我见过一些人使用 BigDecimal。这是作为一个功能。请为它写一些测试:):

    public static BigDecimal currencyNoDecimalToDecimal(int amount, String currencyCode) {
        Currency currency = Currency.getInstance(currencyCode);  // ISO 4217 codes
        BigDecimal bigD = BigDecimal.valueOf(amount);
        System.out.println("bigD = " + bigD); // bigD = 100
        BigDecimal smallD = bigD.movePointLeft(currency.getDefaultFractionDigits());
        System.out.println("smallD = " + smallD); // smallD = 1.00
        return smallD;
    }

    public static void main(String[] args) {
        int amount = 100;
        String currencyCode = "USD";
    
        BigDecimal dollars = currencyNoDecimalToDecimal(amount, currencyCode);
        System.out.println("dollars = "+dollars);
    }
于 2021-11-18T17:28:38.770 回答