从数据库中获取浮点值

本文关键字:获取 数据库 | 更新日期: 2023-09-27 18:04:44

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

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

我不能在客户端四舍五入到第一个小数,因为在数据库中有2、3、4或更多小数点的值。

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

从数据库中获取浮点值

不是float 二进制浮点值在SQL Server?如果是这样,您的值就不是真正的 1.3,因为它在二进制浮点数中无法精确表示。选择:

    也许你的字段是一个有效的十进制浮动(或固定)点类型,在这种情况下,你应该使用decimal在。net方面以及。
  • 如果你在SQL server中使用二进制浮点数,我希望。net中的结果是相同的:与你最初输入的数字最接近的适当类型的二进制浮点值。仅仅因为SQL Server 显示的值为1.3并不意味着它就是 1.3。

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

你的数据库字段实际上是像FLOAT(23)吗?如果是这样,则对应于。net float而不是double。这就解释得通了