BigDecimal保留两位小数异常:为何-1.1400000000000001未得到-1.14?
问题原因与解决方案
你遇到的问题核心是**MathContext的参数定义是有效数字位数,而非小数位数**:
- 你传入的
MathContext(2)表示保留2位有效数字,原数值-1.1400000000000001的有效数字从第一位非零数开始计算,前两位是1和1,所以四舍五入后得到-1.1。 - 若要实现保留两位小数的需求,应该使用
BigDecimal的setScale方法,该方法专门用于指定小数位数和舍入规则。
正确代码示例
// 保留两位小数,采用常用的四舍五入模式 fwdPts = fwdPts.setScale(2, RoundingMode.HALF_UP);
执行上述代码后,fwdPts会得到预期的-1.14。
内容的提问来源于stack exchange,提问作者kris82pl
相关产品推荐
相关产品推荐

