背景
在一次使用中,出现存入数据库的数字比如2.15,但是通过代码读出来后为2.1500000000001的情况。
解决步骤
第一步
nodejs在使用mongoose作为模型映射时,建议浮点类型的字段定义为mongoose.Schema.Types.Decimal128
第二步
检查nodejs中数据转换时是否使用过类似parseFloat函数
,因为这个方法是将字符串数字转化为float的数值类型,但是mongodb数据库的数据类型浮点型只有double类型,这样会导致float转double失精度的问题。
第三步
经过前两步的排除都没有解决问题,发现是在使用mongodb更新操作的时候使用了
i
n
c
操
作
符
,
如
果
传
来
的
值
是
浮
点
型
,
经
过
inc操作符,如果传来的值是浮点型,经过
inc操作符,如果传来的值是浮点型,经过inc操作符更新后就会出现浮点的问题。
解决办法是使用自己的逻辑进行数值计算,将计算结果更新的数据库即可解决问题。