在我的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
更新此值时,正在更新正确的数据
我该如何解决这个问题?
答案 0 :(得分:0)
这与浮动值的预期相同。浮点数不是精确值,因此值1.1实际上可能由值1.10000002384表示。
一种解决方案是将值四舍五入为1或2位数,如果可以的话。另一种解决方案是使用固定的精确数字格式,如Decimal。
编辑:
实际上,Decimal不是固定的精度,但对于大多数用例而言它足够接近。
答案 1 :(得分:0)
出现这种差异的原因是SQL Server中的FLOAT
(未指定N
)实际上具有更接近double
类型的精度而不是float
类型的精度。 C#。在C#代码中使用double
可以消除您看到的差异。