2016-05-09 4 views
0

Я получаю сообщение об ошибке, когда пытаюсь выполнить хранимую процедуру.Преобразование десятичного в десятичный для определенного формата?

C# свойство - что я не могу изменить:

private decimal? a; 
public decimal? A 
{ 
    get { return a; } 
    set { a = value; } 
} 

C# DAC слой, который можно изменить:

if (A.HasValue) 
    dict.Add("A", A.Value); 
else 
    dict.Add("A", null); 

В хранимой процедуре ввода -> не могу изменить

@A decimal(6,0) 

Каков наилучший способ его преобразования без исключения и потери данных? Мне нужно сделать то же самое для @B decimal(8,2)

Столбцы базы данных принимают значения NULL и десятичные числа в формате выше.

Ошибка я получаю:

Ошибка преобразования типа данных числовой системы счисления в десятичную

+1

'dict.Add (" A ", A.HasValue.Value);' не компилируется. Я думаю, вы хотите использовать 'dict.Add (« A », A.Value)' –

+0

'A.HasValue.Value', что? Почему 'dict.Add (« A », A)' не просто работает? Как вы уже писали, в любом случае вы не выполняете специальной обработки для «null». –

+0

@TimSchmelter, Спасибо, Есть ли способ форматировать входной десятичный код C# –

ответ

1

Он никогда не упоминал, какую версию языка, который вы используете, так что я буду считать, что C# 6 Вы можете удалить оператор if/else и просто использовать один оператор dict.Add("A", A?.Value). Это Условный оператор: https://msdn.microsoft.com/en-us/library/dn986595.aspx.

Насколько конвертировать и не потерять данные ... Это, как правило, невозможно. Если у вас есть цифра с точностью до 3 цифр, и вы хотите получить 2 цифры точности, есть округление, связанное с тем, что означает, что числа будут всегда немного отличаться. Если вы хотите преобразовать число из, скажем, 3 десятичных знаков в 2 десятичных знака, просто введите свое значение в string.Format() с соответствующим спецификатором формата. Если вы хотите номер с не точностью (целое число), просто возьмите десятичную и хранить его в целочисленном типе int myWholeNumber = myDecimal; или преобразовать (вероятно, безопаснее) int myWholeNumber = decimal.ConvertToInt32(myDecimal);

Чтобы преобразовать строку в десятичное, просто использовать метод синтаксического анализа , decimal myDecimal = decimal.Parse(myStringDecimalValue);

+0

Спасибо за ваш ответ, В настоящее время я использую C# 4.0, я использую Math.Round() на данный момент, да, как правило, невозможно предотвратить потерю данных. На данный момент я изменил свой код, как dict.Add («A », Math.Round (a.value, 0)); для десятичных (6,0) и dict.Add («B», Math.Round (B.Value, 2)); для десятичной (8,2).надеюсь, что это работает –

Смежные вопросы