Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止c#端的SQL舍入十进制(18,4)输出_C#_Sql Server_Decimal_Rounding - Fatal编程技术网

如何防止c#端的SQL舍入十进制(18,4)输出

如何防止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

我在存储过程中进行计算并传递输出参数。它在SQL端执行良好

但是C#通过自动取整
十进制(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;