【问题标题】:How can I compare a float value in mongodb?如何比较 mongodb 中的浮点值?
【发布时间】:2014-10-27 06:56:33
【问题描述】:

我有一个集合名称 myplace,其中包含 place_name(string)、latitude(float64) 和 longitude(float64)。现在我有一个纬度 12.34567,我需要搜索 mongodb 这个纬度是否存在。 我试过这样,但它返回 null

 db.myplace.find({"latitude":12.3456})

【问题讨论】:

  • 这是正确的查询,假设 latitude 的值保存为浮点数,而不是字符串。
  • 只有float64,但返回空

标签: mongodb go mgo


【解决方案1】:

比较浮点值是否相等通常不是一个好主意,因为在各种浮点运算中发生的舍入可能会导致您期望相等的某些值具有稍微不同的值。

更好的解决方案是检查两个浮点值之间的差异是否小于特定的误差范围E。对于这种查询,检查变为范围检查,例如那:

12.3456 - E < latitude < 12.3456 + E

in this question所述,这种查询可以用mgo表示为:

lat := 12.3456
E := 0.0001
q := c.Find(bson.M{"latitude": bson.M{"$gt": lat - E, "$lt": lat + E}})

【讨论】:

    【解决方案2】:

    首先,您是在寻找(拥有)12.34567 还是(找到)12.3456?

    浮点数是实数的近似值。在一个范围内寻找一个数字。例如,

    (12.34567 - 0.0001) < latitude < (12.34567 + 0.0001)
    

    参考资料:

    Floating point

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多