我的程序中有一个简单的操作:
exposureNoDecimals =
BigDecimal.valueOf(curEffSpreadPremium).multiply(BigDecimal.valueOf(100)).divide(wsRate, 0,
java.math.RoundingMode.HALF_UP).longValue();
exposureNoDecimals - 很长 curEffSpreadPremium - 很长 wsRate - BigDecimal
但是我得到了
"java.lang.ArithmeticException: Division is undefined"
at java.math.BigDecimal.longScaledDivide(BigDecimal.java:3105)
at java.math.BigDecimal.divide(BigDecimal.java:2409)
at java.math.BigDecimal.divide(BigDecimal.java:2396)
at java.math.BigDecimal.divide(BigDecimal.java:2361)
问题是问题是在生产时可以恢复,而不是在我的机器上(无法调试,或无法看到输入)
这里有什么问题?有什么建议/想法吗?
答案 0 :(得分:13)
查看BigDecimal
的源代码(例如here)。
ArithmeticException
只会抛出消息" Division undefined"当你试图将零除零时。
我不会建议修复,因为>>正确<<修复将取决于此计算应该做什么,以及为什么除数/被除数恰好为零。进行一些零检查可能是一个解决方案,但它也可能是一个“创可贴”解决方案"隐藏问题而不是修复它。它可能会在以后回来咬你。
答案 1 :(得分:1)
根据BigDecimal
的源代码,java.lang.ArithmeticException: Division undefined
(没有是)仅在零归零时抛出。
在你的情况下curEffSpreadPremium
和 wsRate
看起来都是零。
所以你需要用零检查来保护线路。