Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq2Sql浮点正在损坏_C#_.net_Linq To Sql - Fatal编程技术网

C# Linq2Sql浮点正在损坏

C# Linq2Sql浮点正在损坏,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我的数据库中有两个字段定义为float [Longitude] [float] NULL [Latitude] [float] NULL 我已经将它们添加到我的linq2sql dbml中,它们显示为浮点数,如下所示 我可以在我的数据库中看到经度值为-3.6607431,但是当我分析sql(使用sql express和自定义分析器工具)时,我看到在查询中传递的实际值为3.6607429981231689 它似乎失去了负号,并增加了额外的值 SQL中的浮点没有映射到dbml中这样的浮点,或者是

我的数据库中有两个字段定义为float

[Longitude] [float] NULL
[Latitude] [float] NULL
我已经将它们添加到我的linq2sql dbml中,它们显示为浮点数,如下所示

我可以在我的数据库中看到经度值为-3.6607431,但是当我分析sql(使用sql express和自定义分析器工具)时,我看到在查询中传递的实际值为3.6607429981231689

它似乎失去了负号,并增加了额外的值


SQL中的浮点没有映射到dbml中这样的浮点,或者是否存在另一个问题

C中
-3.6607431f
的值实际上正好是-3.6607429981231689453125-也就是说,这是最接近
-3.6607431
的可精确表示的浮点值。因此,我认为这回答了精确的部分-这只是一个自然的部分。基本上,您不应该担心这个问题,除非您需要精确的十进制值,在这种情况下,您应该映射到
decimal
,而不是
float
(并适当地更新数据库模式)

符号问题有些不同——我猜你在什么地方把它误诊了,或者你有一些否定事物的代码。我非常怀疑这是一个数据库问题


从您的描述中不清楚您是在获取结果还是在查询中传递参数(您谈论的是“在查询中传递的值”,这可能意味着任何一种方式)。如果您能展示所涉及的代码以及如何诊断问题,这将有所帮助。

浮点数仅在一定程度上是准确的,并且存在您所描述的具有“额外值”的“问题”。这就是float的工作原理


你应该考虑使用十进制,或者可能是双数。进一步阅读:

我最终将数据库中的类型更改为十进制,这似乎解决了大多数问题,我猜lat/long不应该存储为float,因为我们实际上关心的是值是什么,在这种情况下,足够接近还不够好。