提问人:Cef 提问时间:12/3/2022 最后编辑:Cef 更新时间:12/4/2022 访问量:93
为什么 SQL Server 将我的十进制参数 12.50 转换为 12.49999999
Why is SQL Server converting my decimal parameter 12.50 to 12.49999999
问:
我正在将十进制值从 C# 传递到 SQL Server 存储过程。
存储过程中的参数定义为 。在进入存储过程之前,该值为 25.631230@latitude decimal
运行探查器时,我可以看到 SQL Server 将值视为:25.631229999999999
当您处理经度/纬度时,这显然是一个截然不同的值。
SqlParameter lat = new SqlParameter { SqlDbType = System.Data.SqlDbType.Decimal, Value = 25.631230, ParameterName = "@latitude" };
cmd.Parameters.Add(lat);
cmd.CommandText = storedProcName;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.ExecuteReader()
希望这只是一个;)的设置
答:
0赞
Cef
12/4/2022
#1
在存储过程“decimal(18, 15)”中添加精度是正确的解决方案。在我这样做之后,又弹出了另一个让我感到困惑的错误,但事实证明它与这个特定问题无关。
感谢所有为我指明正确方向的人。
下一个:在存储过程中未接收输入值
评论
decimal
decimal(18,0)
System.Data.SqlDbType.Decimal
将从值推断小数位数和精度,因此当您在 Profiler 中查看它时,您不会看到此截断。但是,当存储的 proc 使用该值时,如果参数数据类型不允许任何小数位数> 0,您仍会得到它。参数数据类型应类似于@latitude decimal (8,6)