3
说我有以下聚合:MongoDB的繁殖聚集操作
db.a.aggregate(
[
{ $project: { total: { $multiply: [ 4533, 0.0001 ] } } }
]
)
此聚集的输出是0.45330000000000004时,它显然应该是0.4533。这是聚合框架中的错误吗?
说我有以下聚合:MongoDB的繁殖聚集操作
db.a.aggregate(
[
{ $project: { total: { $multiply: [ 4533, 0.0001 ] } } }
]
)
此聚集的输出是0.45330000000000004时,它显然应该是0.4533。这是聚合框架中的错误吗?
好吧,那么我会建议乘以使用$trunc
,但你基本上可以只链接$multiply
和$divide
这里脱身:
db.a.aggregate(
[
{ "$project": {
"total": {
"$divide": [
{ "$multiply": [
{ "$multiply": [ 4533, 0.0001 ] },
10000
]},
10000
]
}
}}
]
)
或只是$divide
时,那是你的意思是:
db.a.aggregate([
{ "$project": { "total": { "$divide": [ 4533, 10000 ] } } }
])
这两者都会给你:
{ "total" : 0.4533 }
如前所述,浮点数学和四舍五入没有什么新鲜之处,作为一门普通课程,您应该避免使用并简单应用您实际意义上的“非浮点”版本。
长时间阅读,如果你有一段时间在What Every Computer Scientist Should Know About Floating-Point Arithmetic。
不,这不是一个错误。这是mongodb给你的。您可以在获得nodejs中的值后使用toFixed。或者你可以使用这个https://github.com/debitoor/mongo-round –
[欢迎使用计算机科学](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) 。如果你想要不同的东西,请使用['$ trunc'](https://docs.mongodb.com/manual/reference/operator/aggregation/trunc/)。 –
另请参阅:[MongoDB - 值的十进制类型?](https://stackoverflow.com/questions/11541939/mongodb-what-about-decimal-type-of-value/11542549#11542549) –