mongodb aggregate $ sum返回额外的浮点数

时间:2016-05-26 19:29:01

标签: node.js mongodb mongoose sum

我希望通过我们的nodejs服务器上的skus来总结一些库存物品的价格。它们是浮点数。我的文件看起来像这样

[ 
    { 
        quantity: 1,
        price: 38.95,  
        sku: 'C-2177',
        product: 55b9cfc5fa39110bb644becc,
        _id: 56739191b98d1fde79c3034e 
    },
    { 
        quantity: 1,
        price: 24.95,
        sku: 'C-2188',
        product: 55b9d013fa39110bb645100d,
        _id: 5743870e139e80b9ecb48e02 
    } 
]

我的所有价格都在我的架构中定义为Numbers。当我尝试这样的$ group $ sum运算符时:

InventoryItem.model.aggregate([
    { $match: { 'sku': {$in:['C-2177', 'C-2188']}}},
    { $group: { 
        _id: null, subtotal:{$sum:'$price'}
    }}
], function(err, results){
    console.log(results);
});

我得到额外的浮点数字。这里的总和加起来为63.90美元,但我收到了像

这样的回复
[ { _id: null, subtotal: 63.900000000000006 } ]

我使用mongoose 4.4.2和mongodb 2.1.18驱动程序,我的服务器正在运行MongoDB 2.6.11。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:4)

这些是浮点数的正常舍入误差。尝试节点:

> var a = 38.95, b = 24.95; console.log(a + b)
63.900000000000006

为避免这种情况,请不要将价格存储在$中,以美分存储。如果您的数字非常庞大,请使用bigInteger之类的库,并将结果存储为字符串。