В C#, почему это преобразование вызывает "Входная строка была в неправильном формате". ошибка?

У меня есть код, который читает число (но приходит в виде строки), и я пытаюсь преобразовать его в байт.

Обычно значение находится в диапазоне от 0 до 1 (например,.25), и мой код ниже работает нормально, но теперь я наткнулся на отрицательное значение, в частности "-1", и пытаюсь выяснить, почему этот код взрывается:

 public static byte GetByteVal(DataRow dataRow, string caption)
    {
        var val = dataRow.GetValue(caption).ToString().Trim();

        if (!String.IsNullOrEmpty(val))
        {
            decimal convertedVal = Decimal.Parse(val, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint) * 100;

            if (convertedVal >= 0)
            {
                return (byte)(convertedVal);
            }
            else
            {
                return (byte)0;
            }
        }
        return (byte)0;
    }

когда переменная "val" приходит как "-1", я получаю исключение в этой строке:

  decimal convertedVal = Decimal.Parse(val, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint) * 100;

что говорит:

Input string was not in a correct format.

1 ответ

Решение

Вам нужно будет добавить NumberStyles.AllowLeadingSign также:

decimal convertedVal = Decimal.Parse( val, NumberStyles.AllowExponent |
                                           NumberStyles.AllowDecimalPoint | 
                                           NumberStyles.AllowLeadingSign ) * 100;
Другие вопросы по тегам