BigDecimal取整异常:0.0取整后变为0E-8而非0.00000000
问题原因与解决办法
原因
BigDecimal的默认toString()方法会根据数值特性自动切换输出格式:当数值为0且指定了小数位时,容易触发科学计数法的输出逻辑;而像2.0这类非零整数转成指定小数位后,会以普通小数格式输出。你看到的0E-8和0.00000000本质是等价的,只是显示格式不同。
解决方法
如果想强制输出固定的8位小数格式,有两种常用方式:
- 使用
toPlainString()方法,它会直接输出普通十进制字符串,不会采用科学计数法:
val test = BigDecimal.valueOf(0.0) println(test.setScale(8, RoundingMode.CEILING).toPlainString())
执行后会输出0.00000000。
- 用
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
相关产品推荐
相关产品推荐

