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) –