Я делаю расчет в хранимой процедуре и передаю выходной параметр. Хорошо работает в SQL. Но С# извлекает выходное значение -decimal (18,4) - путем автоматического округления, если оно меньше от 0,5 до 0, если больше, чем от 0,5 до 1.
Мне нужен десятичный (18,4) вывод точно.
Как я могу предотвратить округление десятичного (18,4) выходного значения?
С#
double sonuc=0;
SqlCommand cmd = new SqlCommand("findHBK", Connection.Con);
cmd.Parameters.AddWithValue("@yaFark", yaFark);
cmd.Parameters.AddWithValue("@yaTaban", yaTaban);
cmd.Parameters.Add("@sonuc", SqlDbType.Decimal).Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
cmd.ExecuteNonQuery();
sonuc = Convert.ToDouble(cmd.Parameters["@sonuc"].Value);
sql (часть хранимой процедуры)
ALTER proc [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, которые вам нужно вернуть. Это будет работать отлично.
cmd.Parameters["@sonuc"].Precision = 18;
cmd.Parameters["@sonuc"].Scale = 4;
Установите это свойство после добавления параметра в SqlCommand.
Это будет полезно для вас.
Благодарю.
sonuc
и почему вы не объявляете ее как double против использования функцииConvert.ToDouble
cmd.Parameters["@sonuc"].Value
перед приведением к удвоению? Не могли бы вы установить точку останова и посмотреть?