我正在使用SQL Server,在其中一个表中我有浮动可空列。当我在Microsoft SQL Server Management Studio中查看该值时,我在其中一个记录中的值为1.3。我还有客户端应用程序通过实体框架(EF)从数据库获取数据,并且它具有该列的相应可空双(双?)属性。现在当我从数据库中获取值时,它的值为1.2999999523162842。
所有这些记录(超过100万)将用于插值,外推和计算,任何最小偏差都将成为重要值。因此,客户端的所有值都必须与数据库中的值匹配。
我不能在客户端舍入第一个十进制数,因为在数据库中有两个,三个,四个或更多小数点的值。
我的问题是如何通过EF从数据库加载数据库后,确保数据库中的所有值都是相同的值?
提前多多感谢。
答案 0 :(得分:9)
SQL Server中不是float
二进制浮点值吗?如果是这样,那么您的值不是真的 1.3,因为它在二进制浮点中不能完全表示。选项:
decimal
。使用我的DoubleConverter,看起来最近的double
值1.3实际上是1.3000000000000000444089209850062616169452667236328125 - 所以我不确定为什么你会得到你实际看到的价值。最接近的 float
值为1.2999999523162841796875,这听起来就像是你得到的。因此,就好像数据库中的值被转换为32位浮点数而不是64位浮点数。
您的数据库字段实际上是FLOAT(23)
吗?如果是这样,则与.NET float
而不是double
相对应。这可以解释一些事情。