MongoDB C#offi:Lat,Lng作为双精度被存储在精度13和舍入?
我将lat和lng存储为MondoDB和C#官方驱动程序中的双精度值。在MondoDB(由驾驶员或实习生)舍入doubley值后,我的问题与我的观点不匹配。在发布到Repository之前,我已经搜索了所有可能的四舍五入,但没有发现任何内容。为什么不使用小数,因为Query.Near使用双打。
v1.6.5; C#v0.11; Win64平台。MongoDB C#offi:Lat,Lng作为双精度被存储在精度13和舍入?
XX.444057295828145; XX.63416004180907捕获作为字符串 XX.444057295828145; XX.63416004180907收据保存方法之前通过库 MongoDB的内部并返回: XX.4440572958281,XX.6341600418091,已保存和只有后返回(13 dot)
这导致移动的地图。建议。谢谢。
我用这个方法更新
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)));
}
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
我无法重现你所描述的。我可以保存并从MongoDB中检索这些值,而不会损失精度。下面是我使用的测试代码:
作为一个额外的测试,我验证文件内容中使用蒙戈外壳的数据库。
必须在其他地方进行一些舍入。我会检查所有你在双打和字符串之间来回转换的地方。
嗨,山姆,是的是返回AsDouble值,但不是具有相同的精度。点后双精度值在数据库中舍入为13位十进制数。你能抽出你的样品吗?您的示例只控制了双精度但不精确。 – user325558 2011-02-23 21:17:58
我不同意。数据库不是舍入到13位小数。运行我提供的测试代码并检查数据库中的文档。下面是Mongo shell的输出:> db.test.find() {“_id”:ObjectId(“4d6576bce447ad30d8a2ffcb”),“x”:12.444057295828145,“y”:12.63416004180907} >注意,没有精度损失。 – 2011-02-23 21:27:36
是的,测试代码正在从数据库中检索返回的值,并检查它们是否与原始值相等(换句话说,没有精度损失)。您也可以在调试器中查看这些值以进行验证。 – 2011-02-23 21:30:54
下面是一个使用该Update.Set方法的另一个测试:
我依然看不到的精度损失存储值时,到数据库和阅读他们回来。
你不会说你XX的典型值是什么。我在测试中使用了12个。
请注意,double仅具有稍微超过15位十进制数字的总精度(小数点位置无关紧要),因此,您的值越大,剩下的精度就越低小数点。
如果您仅仅超出64位IEEE double类型的精度限制,这与C#驱动程序或MongoDB无关。
感谢Sam和bugai的帮助。当然,所有的答案都是正确的。这是C#的双重限制,并在C#中打印,比如上层文章中的Bugai。我在这里发布用于像我这样的其他用户的逻辑,这个用户使用这个小数点数量输了北。不使用双?不接受往返格式。在您的输出中使用往返格式化程序到Api。感谢comprension。获取位置现在有15位小数。 P.R
我知道。但我不打印或更改直接更新此代码并在文档Db.Centroid.Update( Query.EQ(“_ id”,woeid), Update.Set(“Iso”,iso) .Set (“Lat”,double.Parse(“12,444057295828145”)) .Set(“Lng”,double.Parse(“12,63416004180907”)) .Set(“Zoom”,zoom) ) – user325558 2011-02-23 21:44:33