首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java MonetaryConversions为高数字货币抛出ArithmeticException

java MonetaryConversions为高数字货币抛出ArithmeticException
EN

Stack Overflow用户
提问于 2019-12-04 17:38:47
回答 1查看 111关注 0票数 3

我想使用标准的java MonetaryConversions来转换货币。

乍一看,它工作得很好,而且很简单:

代码语言:javascript
复制
    @Test
    public void testConversion()
    {
        FastMoney usd = FastMoney.of(1000, Monetary.getCurrency("USD"));
        usd.with(MonetaryConversions.getConversion("EUR"));
    }

然而,当我使用像日元或墨西哥比索这样名义价值较高的货币时,我发现这是抛出ArithmeticExceptions。

代码语言:javascript
复制
    @Test
    public void testArithmeticException()
    {
        FastMoney jpy = FastMoney.of(1000, Monetary.getCurrency("JPY"));
        jpy.with(MonetaryConversions.getConversion("EUR"));
    }

抛出以下异常

代码语言:javascript
复制
java.lang.ArithmeticException: 0.0082769 can not be represented by this class, scale > 5

    at org.javamoney.moneta.FastMoney.getInternalNumber(FastMoney.java:197)
    at org.javamoney.moneta.FastMoney.multiply(FastMoney.java:388)
    at org.javamoney.moneta.FastMoney.multiply(FastMoney.java:84)
    at org.javamoney.moneta.spi.AbstractCurrencyConversion.apply(AbstractCurrencyConversion.java:118)
    at org.javamoney.moneta.FastMoney.with(FastMoney.java:594)
    at tech....GatewayTransactionConverterTest.testArithmeticException(GatewayTransactionConverterTest.java:207)

通过检查FastMoney的代码,我发现异常是相当硬编码的,我找不到任何可以缩小规模的地方。

但是这样的话,java提供的转换是非常无用的,因为我不能转换很多货币。我无法想象没有人会有这个问题。但我在谷歌上什么都找不到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 23:57:39

As dementis mentions in a comment:

可以使用基于小数点的货币类吗? FastMoney类是基于longs的,对于高精度的货币计算,不应该依赖它。

这对我有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59181879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档