插入了不正确的浮点数据

本文关键字:数据 不正确 插入 | 更新日期: 2023-09-27 18:20:51

在我的SQL Server中,我有一个表,它有一个名为FloatValue的列,数据类型为Float
我使用以下方法从WCF服务更新此值:

public int UpdateConfig(float value)
    {
        try
        {
            using (SqlConnection conn = GetConnection(DbName.Temp))
            {
                conn.Open();
                string command = @"UPDATE ConfigTable SET FloatValue = @value";
                using (SqlCommand cmd = new SqlCommand(command, conn))
                {
                    cmd.Parameters.AddWithValue("@value", value);
                    int res = cmd.ExecuteNonQuery();
                    return res;
                }
            }
        }
        catch (Exception ex)
        {
            return 0;
        }
    }

我的问题是,当调用这样的方法时:

UpdateConfig(1.1);

像这样的select语句:

SELECT ConfigTable.FloatValue From ConfigTable

返回此值:1.10000002384186

当直接从SSMS更新该值时,正在更新正确的数据
我该如何解决这个问题?

插入了不正确的浮点数据

造成这种差异的原因是SQL Server中的FLOAT(未指定N)的精度实际上更接近double类型,而不是C#中的float类型。在C#代码中使用double应该可以消除您看到的差异。

这与浮点值的预期一样。浮动不是精确的值,因此值1.1实际上可以由值1.10000002384表示。

如果可以的话,一种解决方案是将值四舍五入到1或2位。另一种解决方法是使用固定精度的数字格式,如Decimal。

编辑:
实际上,Decimal不是固定精度的,但对于大多数用例来说,它已经足够接近了。