从数据库中获取浮点值

时间:2011-08-08 16:17:50

标签: c# .net sql-server entity-framework

我正在使用SQL Server,在其中一个表中我有浮动可空列。当我在Microsoft SQL Server Management Studio中查看该值时,我在其中一个记录中的值为1.3。我还有客户端应用程序通过实体框架(EF)从数据库获取数据,并且它具有该列的相应可空双(双?)属性。现在当我从数据库中获取值时,它的值为1.2999999523162842。

所有这些记录(超过100万)将用于插值,外推和计算,任何最小偏差都将成为重要值。因此,客户端的所有值都必须与数据库中的值匹配。

我不能在客户端舍入第一个十进制数,因为在数据库中有两个,三个,四个或更多小数点的值。

我的问题是如何通过EF从数据库加载数据库后,确保数据库中的所有值都是相同的值?

提前多多感谢。

1 个答案:

答案 0 :(得分:9)

SQL Server中不是float 二进制浮点值吗?如果是这样,那么您的值不是真的 1.3,因为它在二进制浮点中不能完全表示。选项:

  • 也许您的字段实际上是十进制浮点(或固定)点类型,在这种情况下,您也应该在.NET端使用decimal
  • 如果你在SQL服务器中使用二进制浮点数,我希望.NET中的结果是相同的:相应类型的最近二进制浮点值与最初输入的数字相同。仅仅因为SQL Server 显示你的值为1.3并不意味着 正好是1.3。

使用我的DoubleConverter,看起来最近的double值1.3实际上是1.3000000000000000444089209850062616169452667236328125 - 所以我不确定为什么你会得到你实际看到的价值。最接近的 float 值为1.2999999523162841796875,这听起来就像是你得到的。因此,就好像数据库中的值被转换为32位浮点数而不是64位浮点数。

您的数据库字段实际上是FLOAT(23)吗?如果是这样,则与.NET float而不是double相对应。这可以解释一些事情。