首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB C# offi : Lat,Lng as doubles存储在precision13和舍入?

MongoDB C# offi : Lat,Lng as doubles存储在precision13和舍入?
EN

Stack Overflow用户
提问于 2011-02-24 04:29:19
回答 4查看 513关注 0票数 1

我将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方法

代码语言:javascript
复制
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)));
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-24 05:34:47

Console.WriteLine的默认格式仅打印小数点后的13位数字。下面的代码片段显示了这一点

代码语言:javascript
复制
    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
票数 0
EN

Stack Overflow用户

发布于 2011-02-24 05:13:10

我无法重现你所描述的内容。我可以在不损失精度的情况下从MongoDB中保存和检索这些值。下面是我使用的测试代码:

http://www.pastie.org/1599603

作为额外的测试,我使用Mongo shell验证了数据库中文档的内容。

一定有别的地方在进行一些舍入。我会检查所有在双精度和字符串之间来回转换的地方。

票数 0
EN

Stack Overflow用户

发布于 2011-02-24 05:53:45

下面是另一个使用Update.Set方法的测试:

http://www.pastie.org/1599777

在将值存储到数据库并读回它们时,我仍然没有看到精度损失。

你没有说你的XX的典型值是什么。我在测试中使用了12。

请注意,double的总精度仅略高于15位小数点(小数点在哪里并不重要),因此XX的值越大,小数点右侧剩余的精度就越低。

如果您只是简单地超出了64位IEEE double类型的精度限制,这与C#驱动程序或MongoDB都没有任何关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5096704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档