Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Безопасная работа с Convert.ToDecimal

50K
04 ноября 2009 года
Bazilisk
11 / / 04.11.2009
На C# учусь делать калькуляторы :)
Вопрос такой:
Иногда результатом вычислений является нечисловое значение (бесконечность, NA или еще что-то).
Если затем попытаться сделать с этим нечисловым значением действие (значение храниться в виде string и переводится в decimal при операции),
то калькулятор вываливается с ошибкой.

Можно ли сделать конвертацию Convert.ToDecimal безошибочной?
Например, если в строке есть не цифры, то присвоить значение нулю...
Или может есть отработанный правильный вариант?

Спасибо
842
04 ноября 2009 года
sigmov
301 / / 16.09.2008
Использовать надо decimal::Parse(...)

А насчет нечисловых значений - при их получении вы будете получать исключение CLR.

Вообще то есть тип double и он поддерживает конвертации:
 
Код:
var NaN = double.Parse("NaN");
         var Inf = double.Parse("бесконечность");
         var mInf = double.Parse("-бесконечность");
         Console.WriteLine(NaN);
         Console.WriteLine(Inf);
         Console.WriteLine(mInf);


Не дает исключений при делении на 0.

Обычно этого достаточно.
50K
04 ноября 2009 года
Bazilisk
11 / / 04.11.2009
Извиняюсь за глупость...
У меня сделано так:
 
Код:
if (plus)
            {
                decimal dec = Convert.ToDecimal(textBox1.Tag) + Convert.ToDecimal(textBox1.Text);
                textBox1.Text = dec.ToString();
            }



Как проще переделать?
Есть еще нюанс с системной точкой ....
5
04 ноября 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Bazilisk

Можно ли сделать конвертацию Convert.ToDecimal безошибочной?
Например, если в строке есть не цифры, то присвоить значение нулю...


 
Код:
decimal x;
if(decimal.TryParse(str, out x)) {
// сконвертировали
} else {
// ошибка
     x = 0;
}
50K
15 ноября 2009 года
Bazilisk
11 / / 04.11.2009
 
Код:
decimal x;
            if (decimal.TryParse(textBox1.Tag, out x))
            {
                // сконвертировали
            }
            else


The best overloaded method match for 'decimal.TryParse(string, out decimal)' has some invalid argument :(

Блин как мне хорошо на PHP без этих приколов с типами...

Чего неправильно делаю?
297
15 ноября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: Bazilisk
Чего неправильно делаю?


Компилятор же выдаёт две ошибки, в которых ясно описано, что он не может конвертировать из 'object' в 'string'.
Чтобы избавиться от этой ошибки, достаточно написать:

 
Код:
if (decimal.TryParse(textBox1.Tag.ToString(), out x))


PS: a вы используете свойство Tag для хранения данных? Может всё-таки должно быть свойство Text?

upd: глянул код выше, понял как используется Tag и Text.
50K
16 ноября 2009 года
Bazilisk
11 / / 04.11.2009
Спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог