我的数据库中有两个字段,定义为浮点数
[Longitude] [float] NULL
[Latitude] [float] NULL
我已将它们添加到我的linq2sql dbml中,它们显示为浮动,如下所示
我可以在我的数据库中看到Longitude的值为-3.6607431但是当我分析sql(使用sql express和自定义分析器工具)时,我看到查询中传递的实际值是3.6607429981231689。
它似乎已经失去了负号并且增加了额外的值。
我是否遗漏了SQL中的浮点数没有映射到dbml中的浮点数,或者是否存在其他问题
答案 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#?