Linq2Sql浮动被破坏了

时间:2012-03-13 23:54:45

标签: c# .net linq-to-sql

我的数据库中有两个字段,定义为浮点数

[Longitude] [float] NULL
[Latitude] [float] NULL

我已将它们添加到我的linq2sql dbml中,它们显示为浮动,如下所示 enter image description here

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

它似乎已经失去了负号并且增加了额外的值。

我是否遗漏了SQL中的浮点数没有映射到dbml中的浮点数,或者是否存在其他问题

2 个答案:

答案 0 :(得分:1)

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

标志问题有些不同 - 我的猜测是你在某个地方误诊了它,或者你有一些代码否定了事情。我非常怀疑这是一个数据库问题。

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

答案 1 :(得分:1)

浮点数仅在某种程度上是准确的,并且具有您描述的具有“额外值”的“问题”。这就是浮点运算的方式。

你应该考虑使用十进制,或者可能是double。进一步阅读:What is the difference between Decimal, Float and Double in C#?