Как предотвратить вывод десятичного (18,4) округления SQL в сторону c #

2

Я делаю расчет в хранимой процедуре и передаю выходной параметр. Хорошо работает в 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
  • 0
    где эта переменная объявлена sonuc и почему вы не объявляете ее как double против использования функции Convert.ToDouble
  • 0
    Каково значение cmd.Parameters["@sonuc"].Valueперед приведением к удвоению? Не могли бы вы установить точку останова и посмотреть?
Показать ещё 8 комментариев
Теги:
decimal
rounding

1 ответ

2
Лучший ответ

Пожалуйста, обратитесь ниже код.

Пожалуйста, установите точность и масштабируемость SqlParameter, которые вам нужно вернуть. Это будет работать отлично.

        cmd.Parameters["@sonuc"].Precision = 18;
        cmd.Parameters["@sonuc"].Scale = 4;

Установите это свойство после добавления параметра в SqlCommand.

Это будет полезно для вас.

Благодарю.

  • 0
    Я не хочу округлять вывод до 0 или 1. Мне нужно предотвратить округление и получить фактическое десятичное значение в 4 цифры после нуля. (как это: 0,4567)
  • 0
    Привет linda22, пожалуйста, теперь предпочитаю мой обновленный asnwer.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню