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

BigDecimal取整异常:0.0取整后变为0E-8而非0.00000000

问题原因与解决办法

原因

BigDecimal的默认toString()方法会根据数值特性自动切换输出格式:当数值为0且指定了小数位时,容易触发科学计数法的输出逻辑;而像2.0这类非零整数转成指定小数位后,会以普通小数格式输出。你看到的0E-8和0.00000000本质是等价的,只是显示格式不同。

解决方法

如果想强制输出固定的8位小数格式,有两种常用方式:

  1. 使用toPlainString()方法,它会直接输出普通十进制字符串,不会采用科学计数法:
val test = BigDecimal.valueOf(0.0)
println(test.setScale(8, RoundingMode.CEILING).toPlainString())

执行后会输出0.00000000。

  1. 用DecimalFormat自定义格式化规则,可更灵活控制输出样式:
import java.text.DecimalFormat

val test = BigDecimal.valueOf(0.0)
val formatted = DecimalFormat("0.00000000").format(test.setScale(8, RoundingMode.CEILING))
println(formatted)

这种方式同样能得到0.00000000,还可根据需求调整格式细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:45:46