我将lat和lng作为双精度存储在MondoDB和C#官方驱动中。在MondoDB中(由驱动程序或实习生)对内部双精度值进行舍入后,我的点数与正确的位置不匹配。在发布到存储库之前,我已经搜索了所有可能的舍入,但没有找到任何东西。为什么不使用十进制,因为Query.Near使用双精度。
v1.6.5;C#v0.11;Win64。
XX.444057295828145;XX.63416004180907捕获为字符串XX.444057295828145;XX.63416004180907 MongoDB内部保存方法前仓库回执,返回: XX.4440572958281,XX.6341600418091,保存返回(点后只有13 )
这会导致一个移动的贴图。建议。谢谢。
我使用这个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)));
}发布于 2011-02-24 05:34:47
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-24 05:13:10
我无法重现你所描述的内容。我可以在不损失精度的情况下从MongoDB中保存和检索这些值。下面是我使用的测试代码:
作为额外的测试,我使用Mongo shell验证了数据库中文档的内容。
一定有别的地方在进行一些舍入。我会检查所有在双精度和字符串之间来回转换的地方。
发布于 2011-02-24 05:53:45
下面是另一个使用Update.Set方法的测试:
在将值存储到数据库并读回它们时,我仍然没有看到精度损失。
你没有说你的XX的典型值是什么。我在测试中使用了12。
请注意,double的总精度仅略高于15位小数点(小数点在哪里并不重要),因此XX的值越大,小数点右侧剩余的精度就越低。
如果您只是简单地超出了64位IEEE double类型的精度限制,这与C#驱动程序或MongoDB都没有任何关系。
https://stackoverflow.com/questions/5096704
复制相似问题