如何防止SQL四舍五入十进制(18,4)输出在c#端
本文关键字:输出 SQL 何防止 四舍五入 十进制 | 更新日期: 2023-09-27 18:14:01
我在存储过程中进行计算并传递输出参数。它在SQL端执行得很好。
但是c#通过自动四舍五入来检索类型decimal(18,4)
的输出值,如果它小于0,5到0,如果大于0.5到1。
我需要精确的decimal(18,4)
输出。
如何防止decimal(18,4)
输出值四舍五入?
double sonuc=0;
SqlCommand cmd = new SqlCommand("findHBK", Connection.Con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@yaFark", yaFark);
cmd.Parameters.AddWithValue("@yaTaban", yaTaban);
cmd.Parameters.Add("@sonuc", SqlDbType.Decimal).Direction = ParameterDirection.Output;
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
cmd.ExecuteNonQuery();
sonuc = Convert.ToDouble(cmd.Parameters["@sonuc"].Value);
SQL(存储过程的一部分)
ALTER PROCEDURE [dbo].[findHBK]
(@yaTaban DECIMAL(18, 2),
@yaFark DECIMAL(18, 2),
@sonuc DECIMAL(18, 4) OUTPUT)
AS
BEGIN
DECLARE @minhbk DECIMAL(18, 4),
@maxhbk DECIMAL(18, 4),
@hbkFark DECIMAL(18, 4)
IF (@yaTaban BETWEEN 2000 AND 5000)
BEGIN
SET @maxhbk = (SELECT MAX(HBK) FROM TBL_MDHB
WHERE YapiAlani BETWEEN @yaTaban AND @yaTaban + 200)
SET @minhbk = (SELECT MIN(HBK) FROM TBL_MDHB
WHERE YapiAlani BETWEEN @yaTaban AND @yaTaban + 200)
-- SET @sonuc = @maxhbk - (((@maxhbk - @minhbk) * @yaFark) / 200);
SET @sonuc = 0.3292
SELECT @sonuc
END
SELECT @sonuc OUT
END
请参考以下代码。
请设置需要返回的SqlParameter的Precision和Scale属性。它会工作得很好。
cmd.Parameters["@sonuc"].Precision = 18;
cmd.Parameters["@sonuc"].Scale = 4;
在SqlCommand中添加参数后设置此属性。
这对你会有帮助的。
谢谢。