【问题标题】:mongodb multiply aggregation operatormongodb乘法聚合运算符
【发布时间】:2017-06-19 09:47:18
【问题描述】:

假设我有以下聚合:

 db.a.aggregate(
   [
     { $project: {  total: { $multiply: [ 4533, 0.0001 ] } } }
   ]
)

这个聚合的输出是 0.45330000000000004,而它显然应该是 0.4533。这是聚合框架中的错误吗?

【问题讨论】:

标签: mongodb aggregation-framework


【解决方案1】:

好的,那么我将建议将$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

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 2018-09-20
    • 2017-05-21
    • 2015-10-31
    • 1970-01-01
    • 2020-12-03
    • 2016-09-11
    相关资源
    最近更新 更多