插入了错误的浮点数据

时间:2013-07-02 11:23:22

标签: c# wcf sql-server-2008r2-express

在我的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更新此值时,正在更新正确的数据 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这与浮动值的预期相同。浮点数不是精确值,因此值1.1实际上可能由值1.10000002384表示。

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

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

答案 1 :(得分:0)

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