C#Float不作为精确值插入
将浮点插入SQL Server数据库时,我得到:C#Float不作为精确值插入,c#,sql-server,C#,Sql Server,将浮点插入SQL Server数据库时,我得到: 5.03000020980835 这不是正在收集的确切值 我是怎么收集这个浮子的?通过文本框控件将其转换为float 我目前如何处理数据: private void PayRateTextBox_TextChanged(object sender, EventArgs e) { PayRateBox = float.Parse(PayRateTextBox.Text); } 上面是为当前更新的文本框设置内部浮动
5.03000020980835
这不是正在收集的确切值
我是怎么收集这个浮子的?通过文本框控件将其转换为float
我目前如何处理数据:
private void PayRateTextBox_TextChanged(object sender, EventArgs e)
{
PayRateBox = float.Parse(PayRateTextBox.Text);
}
上面是为当前更新的文本框设置内部浮动,设置如下:
private float PayRateBox = 0;
然后插入为:
string Query = "INSERT INTO shifts (ShiftDate,WeekNumber,Hours,PayType,Rate) " +
"VALUES(@Date, @WeekNo, @Hours, @PayType, @Rate)";
并通过绑定参数绑定到查询:
CMD.Parameters.Add("@Rate", SqlDbType.Float);
CMD.Parameters["@Rate"].Value = PayRate;
文本框中的默认文本设置为5.03,因此会在行的某个位置附加其他数据,以使总值增加。我曾试图追踪这件事发生的地方,但无法找出发生的方式和原因。也许我忽略了什么 的精度限制为7位有效数字。在您的情况下,它的意思是5.030000
。小数点后面的值未定义
要提高精度,请使用15-16位有效数字或28-29位有效数字的精度。的精度限制为7位有效数字。在您的情况下,它的意思是5.030000
。小数点后面的值未定义
要提高精度,请使用15-16位有效数字或28-29位有效数字的精度。浮点数不精确,因此这并不奇怪。@grantwiney在更改表和活动代码后。它就像一个符咒。表的新结构是
十进制(3,2)代码>与float
对应的浮点数不精确,因此这并不奇怪。@grantwiney在对表和活动代码进行更改后说。它就像一个符咒。表的新结构是十进制(3,2)与float
类似,code>可以在1分钟内接受作为答案,但如果在7位之后精度丢失,则会发现它有一点设计错误。有时,7位的精度就足够了,这取决于您试图解决的问题。另外,float
的大小只有4B,而double
的大小是8B,而decimal
16B。所以浮点数可以节省内存。@DarylGill那么如何设计精度超过7位的32位浮点数呢?如果你没有留下指数的空间(本质上是一个int
)@DarylGill,你能做的最好的事情就是10位数这是野兽的本性。你可以用表示非常广泛的价值的能力来换取不能准确地表达任何价值的能力。当我在大学时,我发现整个系的老师都不明白这一点——没有人会相信终止条件为x=x+1的循环会退出。任意精度的小数点算法是可能的(基于所谓的p-adic算法),但这不是现代机器实现非积分的方式。是的,这确实是一个不足之处。可以在1分钟内接受答案,但如果在7位数后精度丢失,则会发现它有一点设计错误。有时,7位数的精度就足够了,这取决于您试图解决的问题。另外,float
的大小只有4B,而double
的大小是8B,而decimal
16B。所以浮点数可以节省内存。@DarylGill那么如何设计精度超过7位的32位浮点数呢?如果你没有留下指数的空间(本质上是一个int
)@DarylGill,你能做的最好的事情就是10位数这是野兽的本性。你可以用表示非常广泛的价值的能力来换取不能准确地表达任何价值的能力。当我在大学时,我发现整个系的老师都不明白这一点——没有人会相信终止条件为x=x+1的循环会退出。任意精度的小数点算法是可能的(基于所谓的p-adic算法),但这不是现代机器实现非积分的方式。是的,这确实是缺少的。