decimal x;
if(decimal.TryParse(str, out x)) {
// сконвертировали
} else {
// ошибка
x = 0;
}
Безопасная работа с Convert.ToDecimal
Вопрос такой:
Иногда результатом вычислений является нечисловое значение (бесконечность, NA или еще что-то).
Если затем попытаться сделать с этим нечисловым значением действие (значение храниться в виде string и переводится в decimal при операции),
то калькулятор вываливается с ошибкой.
Можно ли сделать конвертацию Convert.ToDecimal безошибочной?
Например, если в строке есть не цифры, то присвоить значение нулю...
Или может есть отработанный правильный вариант?
Спасибо
А насчет нечисловых значений - при их получении вы будете получать исключение CLR.
Вообще то есть тип double и он поддерживает конвертации:
Код:
var NaN = double.Parse("NaN");
var Inf = double.Parse("бесконечность");
var mInf = double.Parse("-бесконечность");
Console.WriteLine(NaN);
Console.WriteLine(Inf);
Console.WriteLine(mInf);
var Inf = double.Parse("бесконечность");
var mInf = double.Parse("-бесконечность");
Console.WriteLine(NaN);
Console.WriteLine(Inf);
Console.WriteLine(mInf);
Не дает исключений при делении на 0.
Обычно этого достаточно.
У меня сделано так:
Код:
if (plus)
{
decimal dec = Convert.ToDecimal(textBox1.Tag) + Convert.ToDecimal(textBox1.Text);
textBox1.Text = dec.ToString();
}
{
decimal dec = Convert.ToDecimal(textBox1.Tag) + Convert.ToDecimal(textBox1.Text);
textBox1.Text = dec.ToString();
}
Как проще переделать?
Есть еще нюанс с системной точкой ....
Цитата: Bazilisk
Можно ли сделать конвертацию Convert.ToDecimal безошибочной?
Например, если в строке есть не цифры, то присвоить значение нулю...
Код:
Код:
decimal x;
if (decimal.TryParse(textBox1.Tag, out x))
{
// сконвертировали
}
else
if (decimal.TryParse(textBox1.Tag, out x))
{
// сконвертировали
}
else
The best overloaded method match for 'decimal.TryParse(string, out decimal)' has some invalid argument :(
Блин как мне хорошо на PHP без этих приколов с типами...
Чего неправильно делаю?
Цитата: Bazilisk
Чего неправильно делаю?
Компилятор же выдаёт две ошибки, в которых ясно описано, что он не может конвертировать из 'object' в 'string'.
Чтобы избавиться от этой ошибки, достаточно написать:
Код:
if (decimal.TryParse(textBox1.Tag.ToString(), out x))
PS: a вы используете свойство Tag для хранения данных? Может всё-таки должно быть свойство Text?
upd: глянул код выше, понял как используется Tag и Text.
Спасибо!