1,接口传来一个JSON串,里面有个数字:57.3。2,解析JSON并把这个数字保存在一个float变量。3,把这个float变量赋值给一个 BigDecimal对象,用的是BigDecimal的double参数的构造:4,把这个BigDecimal保存到MySQL数据库,字段类型是decimal。这段代码逻辑在线上跑了好久了,数据库保存的值是57.3也没什么问题,但是在今天debug的时候发现,第三步的BigDecimal对象保存的值并不是57.3,而是57.299999237060546875,很明显,出现了精度的问题。至于数据库最终保存了正确的57.3完全是因为字段类型设置为2位小数,超过2位小数就四舍五入,所以才得到了正确的结果,相当于MySQL给我们把这个精度问题掩盖了。总觉得这是个坑,所以研究了一下相关的知识。

Java double转BigDecimal的注意事项说明

Java double转BigDecimal的注意事项说明

Java double转BigDecimal的注意事项说明

Java double转BigDecimal的注意事项说明