1

MondoDB と C# の公式ドライバーでは、lat と lng を double として保存します。MondoDB で (ドライバーまたはインターンによって) 内部で double 値を丸めた後、正しい場所に一致しないポイントに問題があります。リポジトリに投稿する前に、可能なすべての丸めを検索しましたが、何も見つかりませんでした。Query.Near は double を使用するため、10 進数を使用しないのはなぜですか。
v1.6.5; C#v0.11; Win64.

XX.444057295828145;XX.63416004180907 文字列 XX.444057295828145;XX.63416004180907 としてキャプチャされます Save メソッドの前にリポジトリによって受信 MongoDB 内で返されます: XX.4440572958281、XX.6341600418091 の後にのみ保存され、返されます

これにより、マップが移動します。アドバイス。ありがとう。

この Update メソッドを使用します

public void SaveGeoPoints(String id, String lat, String lng)
{
    //--> XX.444057295828145;XX.63416004180907
    Db.repository.Update(
       Query.EQ("_id", id),
       Update.Set("Lat", double.Parse(lat))
           .Set("Lng", double.Parse(lng)));
}
4

4 に答える 4

0

Console.WriteLineのデフォルトの形式は、小数点以下13桁のみを出力します。次のコードスニペットはこれを示しています

    var test = "10.444057295828145";
    Console.WriteLine(test);
    var testInDouble = double.Parse(test);
    Console.WriteLine(testInDouble);
    Console.WriteLine(testInDouble.ToString("R"));
Console output is
    10.444057295828145
    10.4440572958281
    10.444057295828145
于 2011-02-23T21:34:47.230 に答える
0

あなたが説明していることを再現することはできません。精度を失うことなく、MongoDB からこれらの値を保存および取得できます。使用したテストコードは次のとおりです。

http://www.pastie.org/1599603

追加のテストとして、Mongo シェルを使用してデータベース内のドキュメントの内容を確認しました。

どこかで丸めが行われているに違いありません。double と文字列の間を行き来するすべての場所をチェックします。

于 2011-02-23T21:13:09.580 に答える
0

サムとブガイに感謝します。もちろん正解はすべて正解です。上の投稿のポイント Bugai のように、C# の double と C# での印刷の制限です。ここに、この量の小数で北を失った私のような他のユーザーに使用される論理を投稿します。ダブル使わない?は往復形式を受け付けていません。Api への出力でラウンドトリップ フォーマッタを使用します。ご理解いただきありがとうございます。Get Location の小数点以下 15 桁になりました。広報

public class BsonCentroid
{
    [BsonId]
    public String Id { get; set; }
    public String Location 
    {
        get { return String.Format("{0};{1}", Lat.ToString("r"), Lng.ToString("r")); }  
    }
    public double Lat { get; set; }
    public double Lng { get; set; }
}    
于 2011-02-23T23:32:55.480 に答える
0

Update.Set メソッドを使用する別のテストを次に示します。

http://www.pastie.org/1599777

値をデータベースに保存して読み戻すときに、精度が失われることはありません。

あなたはXXの典型的な値が何であるかを言いません. テストでは12を使用しています。

double の合計精度は 15 桁をわずかに超えるだけであることに注意してください (小数点の位置は関係ありません)。そのため、XX の値が大きいほど、小数点の右側で使用できる精度が低くなります。

C# ドライバーまたは MongoDB とは関係のない 64 ビット IEEE double 型の精度制限を単純に超えている場合。

于 2011-02-23T21:53:45.347 に答える