从数据库中获取浮点值

Vla*_*den 1 .net c# sql-server entity-framework

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

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

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

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

非常感谢提前.

Jon*_*eet 9

是不是float一个二进制在SQL Server浮点值?如果是这样,你的价值是不是真的 1.3,因为这是不是二进制浮点精确表示.选项:

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

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

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