场景
通过 Excel 导入数据,数据中包含金额。数据库类型 decimal(18, 6)
问题
Excel 导入后所有的金额列都被四舍五入。经过测试,只有数据有整数时所有数据才会被四舍五入,全部为浮点类型没有问题。
解决
强制设置小数位数
// RoundingMode.HALF_UP 为舍入参数,相当于小数位大于6时截断位的四舍五入
new BigDecimal(infoImport.getMoney()).setScale(6, RoundingMode.HALF_UP);
原因
整数类型字符串转为 BigDecimal 类型时,默认的小数位为 0 从而影响了其他数值,具体为什么会影响其他数值暂时未知,可能是 Mybatis 或是 SqlServer 的问题。如果您知道,欢迎评论解答~