3

place_name(string)、緯度(float64)、経度(float64)を持つコレクション名myplaceがあります。今、私は緯度12.34567を持っています。この緯度が存在するかどうかをmongodbで検索する必要があります。私はこのように試しましたが、nullを返しました

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

2 に答える 2

4

さまざまな浮動小数点演算で発生する丸めにより、等しいと予想される特定の値がわずかに異なる値になる可能性があるため、浮動小数点値が等しいかどうかを比較することは一般に悪い考えです。

より良い解決策は、2 つの浮動小数点値の差が特定の誤差範囲よりも小さいことを確認することですE。この種のクエリの場合、チェックは次のような範囲チェックになります。

12.3456 - E < latitude < 12.3456 + E

この質問で説明されているように、この種のクエリは mgo で次のように表すことができます。

lat := 12.3456
E := 0.0001
q := c.Find(bson.M{"latitude": bson.M{"$gt": lat - E, "$lt": lat + E}})
于 2014-10-27T07:22:05.300 に答える
2

まず、12.34567 を探している (持っている) か、12.3456 を (見つけている) か?

浮動小数点数は実数の近似値です。範囲内の数値を探します。例えば、

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

参考文献:

浮動小数点

于 2014-10-27T07:13:49.720 に答える