C# Float 不作为精确值插入

标签 c# sql-server

将 float 插入 SQL Server 数据库时,我得到:

5.03000020980835

这不是正在收集的确切值。

我是如何收集这个浮标的?通过将文本框控件转换为float

我目前如何处理数据:

   private void PayRateTextBox_TextChanged(object sender, EventArgs e)
   {
       PayRateBox = float.Parse(PayRateTextBox.Text);
   }

上面是为当前更新的文本框设置一个内部 float :

 private float PayRateBox = 0;

然后插入为:

string Query = "INSERT INTO shifts (ShiftDate,WeekNumber,Hours,PayType,Rate) " + 
               "VALUES(@Date, @WeekNo, @Hours, @PayType, @Rate)";

并通过绑定(bind)参数绑定(bind)到查询:

CMD.Parameters.Add("@Rate", SqlDbType.Float);
CMD.Parameters["@Rate"].Value = PayRate;

TextBox 中的默认文本设置为 5.03,因此沿线的某处附加了其他数据以使整体值增加。我试图追踪发生这种情况的位置,但无法找出发生这种情况的方式和原因。也许我忽略了什么?

最佳答案

float 的精度限制为 7 位有效数字。在您的例子中,它表示 5.030000。其余小数位的值未定义。

要提高精度,请使用 double精度为 15-16 位有效数字或 decimal 28-29位有效数字。

关于C# Float 不作为精确值插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538900/

相关文章:

C# 错误转换 int 类型

sql - join 语句中的别名问题

sql - 有没有办法在 Microsoft SQL Server 中每个表的每个字段中找到特定值?

sql-server - 将 SELECT 分配给 DBVisualizer 中 SQL-Commander 中的变量

sql-server - 如何在T-SQL中设置多个变量的值?

sql - varchar(max) MS SQL Server 2000,有问题吗?

c# - 是否可以在 Unity 编辑器中显示静态字段?

c# - 需要帮助在 C# 中为链表制作枚举器

c# - 遍历 IEnumerable 并按日期和时间跨度差异分组

c# - 为什么允许使用 string.Substring(length,0)?