You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中BigDecimal运算符重载使用异常及导入问题咨询

Kotlin中BigDecimal除法操作的差异解析

不需要特殊导入

你已经导入了java.math.BigDecimal,Kotlin对BigDecimal的运算符重载是标准库内置的扩展函数,无需额外导入任何包。

结果差异的核心原因

三个调用的本质区别在于使用的除法逻辑不同:

  • num/den 与 num.div(den):二者完全等价,Kotlin的/运算符会被编译为调用div()扩展函数。该函数默认采用**ROUND_HALF_UP(四舍五入)**的舍入模式,并且会匹配被除数的小数位数来处理结果。你的num是BigDecimal("15.5"),小数位数为1,所以计算出的0.155会被四舍五入到1位小数,最终得到0.2。
  • num.divide(den):这是Java BigDecimal的原生方法,当除法运算能得到精确结果时(比如15.5/100=0.155),它会直接返回精确值,不会执行任何舍入操作。只有当除法无法除尽时,才会抛出ArithmeticException(除非显式指定舍入模式)。

如何统一结果

如果希望/或div()也返回精确值,可以手动指定精度和舍入模式:

// 获取精确结果
val preciseResult = num.div(den, MathContext.DECIMAL128)
// 或者直接调用带舍入模式的原生方法
val preciseResult2 = num.divide(den, RoundingMode.UNNECESSARY)

上述代码会得到与原生divide()一致的0.155。

内容的提问来源于stack exchange,提问作者Harsha Limaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:10:27