前几天在mongodb数据库上发现一个数据类型为number,值为4.199999999999999的数据,如图, 感觉很奇怪。 查看了nodejs的代码。发现唯一修改这个数据的程序是用了$inc修改器。本着重现bug情景的原则,重新建立了一条新的数据。如图 执行了语句, 第一次发现正常执行,但是重复执行了六次之后,奇怪的事发生了。产生了这样的结果。
后来想找一下网上有没有相关的情况发生,结果一无所获,好吧,想到了大神云集的cnode
@kiroChen 小数本来就是一个禁区,关于这部分每个数据库都极力避免,有的索性就不支持。我的侧重点在于应用层设计是否有这个必要?是否可以存成整数? 下面是3.X的mongodb的结果: > db.test.update({},{$set:{num:100}}) >WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 }) > db.test.find() { “_id” : ObjectId(“5591048564f5d63d9ff66db4”), “num” : 100 } > db.test.update({},{$inc:{num:0.1}}) WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 }) > db.test.find() { “_id” : ObjectId(“5591048564f5d63d9ff66db4”), “num” : 100.1 } > db.test.update({},{$inc:{num:0.1}}) WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 }) > db.test.find() { “_id” : ObjectId(“5591048564f5d63d9ff66db4”), “num” : 100.19999999999999 }