MongoDB 浮点值精度?
MongoDB floating point value precision?
据我所知,JavaScript 使用 IEEE 754 浮点数来处理实数。
使用时出现问题,很常见的问题:
0.1 + 0.2 = 0.30000000000000004
大部分时间,使用像 'big.js' 这样的模块,但问题是在使用 MongoDB.
时
看这个文档:
{ "_id" : ObjectId("58ff8f721bbfbcd140e472b3"), "value" : 0.1 }
当我 运行 $inc 这样:
db.dec.update({ _id: ObjectId('58ff8f721bbfbcd140e472b3') }, { $inc: { value: 0.2 }});
结果一点都不好:
{ "_id" : ObjectId("58ff8f721bbfbcd140e472b3"), "value" : 0.30000000000000004 }
我知道为什么会这样,但有没有办法避免这个问题?
如果您确切知道所需的小数位数,则可以Number((.1+.2).toFixed(1))
。或者您可以为 mongodb 使用 orm,例如 mongoose,并为您的数据库文档定义模型,并使用模型中的一些代码定义您想要的精度。
据我所知,JavaScript 使用 IEEE 754 浮点数来处理实数。 使用时出现问题,很常见的问题:
0.1 + 0.2 = 0.30000000000000004
大部分时间,使用像 'big.js' 这样的模块,但问题是在使用 MongoDB.
时看这个文档:
{ "_id" : ObjectId("58ff8f721bbfbcd140e472b3"), "value" : 0.1 }
当我 运行 $inc 这样:
db.dec.update({ _id: ObjectId('58ff8f721bbfbcd140e472b3') }, { $inc: { value: 0.2 }});
结果一点都不好:
{ "_id" : ObjectId("58ff8f721bbfbcd140e472b3"), "value" : 0.30000000000000004 }
我知道为什么会这样,但有没有办法避免这个问题?
如果您确切知道所需的小数位数,则可以Number((.1+.2).toFixed(1))
。或者您可以为 mongodb 使用 orm,例如 mongoose,并为您的数据库文档定义模型,并使用模型中的一些代码定义您想要的精度。