插入了不正确的浮点数据
本文关键字:数据 不正确 插入 | 更新日期: 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不是固定精度的,但对于大多数用例来说,它已经足够接近了。