如何防止c#端的SQL舍入十进制(18,4)输出
我在存储过程中进行计算并传递输出参数。它在SQL端执行良好 但是C#通过自动取整如何防止c#端的SQL舍入十进制(18,4)输出,c#,sql-server,decimal,rounding,C#,Sql Server,Decimal,Rounding,我在存储过程中进行计算并传递输出参数。它在SQL端执行良好 但是C#通过自动取整十进制(18,4)类型的输出值(如果小于0,5到0,如果大于0.5到1),来检索该类型的输出值 我需要精确的十进制(18,4)输出 如何防止输出值被四舍五入 C# SQL(存储过程的一部分) 请参考下面的代码 请设置需要返回的SqlParameter的精度和比例属性。 它将完美地工作 cmd.Parameters["@sonuc"].Precision = 18; cmd.Parame
十进制(18,4)
类型的输出值(如果小于0,5到0,如果大于0.5到1),来检索该类型的输出值
我需要精确的十进制(18,4)
输出
如何防止输出值被四舍五入
C#
SQL(存储过程的一部分)
请参考下面的代码 请设置需要返回的SqlParameter的精度和比例属性。 它将完美地工作
cmd.Parameters["@sonuc"].Precision = 18;
cmd.Parameters["@sonuc"].Scale = 4;
在SqlCommand中添加参数后设置此属性
这将对你有帮助
谢谢。这个变量在哪里声明的
sonuc
,为什么不使用Convert.ToDouble
函数将它声明为double vs呢cmd.Parameters[“@sonuc”].value
在转换为double之前的值是多少?你能设置一个断点看看吗?我更新了我的问题执行存储过程时@sonuc的值正确吗?@Win问你:当你在这行的C代码中设置断点时会发生什么情况sonuc=Convert.ToDouble(cmd.Parameters[“@sonuc”].value)
。检查@sonuc
的参数值-结果实际上是“0.3292”?我不想将输出四舍五入为0或1。我需要防止四舍五入,并获得零后4位的实际十进制值。(比如:0.4567)
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
cmd.Parameters["@sonuc"].Precision = 18;
cmd.Parameters["@sonuc"].Scale = 4;