我希望通过我们的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。任何帮助表示赞赏!
答案 0 :(得分:4)
这些是浮点数的正常舍入误差。尝试节点:
> var a = 38.95, b = 24.95; console.log(a + b)
63.900000000000006
为避免这种情况,请不要将价格存储在$中,以美分存储。如果您的数字非常庞大,请使用bigInteger
之类的库,并将结果存储为字符串。