0

在我SQL Server的表中,有一个名为FloatValueWith a Floatdata type 的列。
我使用此方法从服务更新此值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正确的数据更新此值时,正在更新。
我该如何解决这个问题?

4

2 回答 2

1

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

于 2013-07-02T11:29:01.593 回答
0

这与浮点值的预期一致。浮点数不是精确值,因此值 1.1 可能确实由值 1.10000002384 表示。

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

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

于 2013-07-02T11:27:26.457 回答