gpt4 book ai didi

c# - 如何防止 C# 端的 SQL 舍入小数 (18,4) 输出

转载 作者:行者123 更新时间:2023-11-30 16:00:28 24 4
gpt4 key购买 nike

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

但是 C# 检索 decimal(18,4) 类型的输出值,如果小于 0.5 则自动四舍五入为 0,如果高于 0.5 则自动四舍五入为 1。

我需要 decimal(18,4) 精确输出。

如何防止 decimal(18,4) 输出值被四舍五入?

C#

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 中添加参数后设置此属性。

这对你有帮助。

谢谢。

关于c# - 如何防止 C# 端的 SQL 舍入小数 (18,4) 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com