我想使用标准的java MonetaryConversions来转换货币。
乍一看,它工作得很好,而且很简单:
@Test
public void testConversion()
{
FastMoney usd = FastMoney.of(1000, Monetary.getCurrency("USD"));
usd.with(MonetaryConversions.getConversion("EUR"));
}然而,当我使用像日元或墨西哥比索这样名义价值较高的货币时,我发现这是抛出ArithmeticExceptions。
@Test
public void testArithmeticException()
{
FastMoney jpy = FastMoney.of(1000, Monetary.getCurrency("JPY"));
jpy.with(MonetaryConversions.getConversion("EUR"));
}抛出以下异常
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提供的转换是非常无用的,因为我不能转换很多货币。我无法想象没有人会有这个问题。但我在谷歌上什么都找不到。
发布于 2020-06-10 23:57:39
https://stackoverflow.com/questions/59181879
复制相似问题