Рейтинг:
7
Karthik_Mahalingam
попробовать это
string defaultText = "sqIn in zero";
tbTotesPerLayers.Text = SqIn ==0 ? defaultText: (comBo / SqIn).ToString();
Member 12349103
Спасибо за Ваш вклад программа отлично работает в Visual Studio без каких-либо ошибок.Когда я запускаю exe-файл, я получаю ошибку, некоторые поля автоматически заполняют данные, так что при вводе tb заполняется 0, пока я не закончу. Опять же работает нормально в VS.Все коробки имеют этот тип формата.
private void tbCasePerTier_TextChanged(object sender, EventArgs e)
{
int Height, TotesLayers;
int.TryParse(tbHeight.Text, out Height);
int.TryParse(tbTotesLayers.Text, out TotesLayers);
string defaultText = "Height in zero";
tbTotesPerLayers.Text = Height == 0 ? defaultText : (TotesLayers / Height).ToString();
Karthik_Mahalingam
в чем была ошибка
Member 12349103
Попытайтесь разделить на ноль.
Karthik_Mahalingam
тогда это может быть из какой-то другой области, проверьте с помощью блока try catch.
Member 12349103
Спасибо ребятам за большую помощь, этот код работал для меня так, как он помогает другим.
Я использовал его во всех коробках.
private void tbLayers_TextChanged(object sender, EventArgs e)
{
try
{
int SqIn, comBo;
if (string.IsNullOrEmpty(tbSqIn.Text) || string.IsNullOrEmpty(tbPallet.Text))
return;
int.TryParse(tbSqIn.Text, out SqIn);
int.TryParse(tbPallet.Text, out comBo);
if (SqIn > 0)
tbTotesPerLayers.Text = (comBo / SqIn).ToString();
else
tbTotesPerLayers.Text = string.Empty;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Karthik_Mahalingam
хороший
Рейтинг:
2
Ramza360
Если SqIn равен 0, просто верните combo или что угодно еще.
tbTotesPerLayers.Text = SqIn == 0 : combo.ToString() ? (comBo / SqIn).ToString();
ZurdoDev
комбо.ToString () - это имя элемента управления в библиотеке .net. Что толку от этого в математической задаче?
Реальный вопрос заключается в том, что пользователь хочет, чтобы произошло, когда он равен 0. Надеюсь, просто сообщение об ошибке.
Ramza360
ни одна комбинация не является целым числом... Посмотрите на ОП
Philippe Mori
Идея правильная, но не отображаемый текст. Вы либо хотите оставить поле пустым, либо отобразить какой-то текст, который ясно показывает, что значение не может быть вычислено.
Рейтинг:
1
Patrice T
Оба
... (comBo / SqIn);
и
...combo / ((SqIn == 0) ? 0 : SqIn);
дают точно такой же результат, вторая форма ОС просто сложнее.
Правильный вопрос: "ожидаете ли вы
SqIn
быть нулем ? или нет ?"
Если вы ожидаете
SqIn
чтобы быть нулем, вы должны проверить его, прежде чем пытаться разделить.
В
int.TryParse(tbSqIn.Text, out SqIn);
Вы не проверяете, если
TryParse
в завершенных или нет.
ZurdoDev
TryParse будет true, а SqIn будет иметь 0 в том случае, если они ввели 0 в текстовое поле.
Рейтинг:
1
ZurdoDev
Как уже упоминалось в комментариях, сначала вам нужно проверить ноль. В разделе "Что я пробовал" вы написали код, который если SqIn равен 0, то делите на 0. Это утверждение избыточно и ничего не делает.
Трюк, который вы могли бы использовать, - это что-то вроде:
combo / (SqIn + 0.0000000001)
Это делает так, что деление на ноль, скорее всего, никогда не произойдет, и если вам не нужна большая точность в математике, это обходной путь.
Или просто проверьте 0. Простой.
0x01AA
Я не думаю,что "+ 0.0000000001" помогает.
a.) OP вычислить с помощью int
Б.) В зависимости от номинатора также + 0.0000000001 может закончиться проблемой (я думаю)...не уверен в этом пункте
Philippe Mori
А затем пользователь (или QA) решает попробовать протестировать -0.0000000001, и он снова падает. В этом случае обычно вы пишете пользовательскую строку ("", "-", "n/a",...) вместо этого и в какой-то момент выполняете проверку и показываете, что значение не является допустимым для пользователя.
ZurdoDev
О. почти уверен, что компилятор все еще позволяет это. Я в основном делаю этот трюк в SQL, чтобы избежать написания оператора case.
Б. Да, но кажется очень маловероятным, что это когда-нибудь произойдет.
Как уже упоминалось, проверка на 0 по-прежнему является лучшим вариантом.
Рейтинг:
0
0x01AA
combo / ((SqIn == 0) ? 0 : SqIn)
означает
if (SqIn == 0)
... combo /0
else
.... combo / SqIn
Я думаю, этого должно быть достаточно, чтобы решить ее.
Patrice T
"Я думаю, этого должно быть достаточно, чтобы решить эту проблему."
вы уверены, что это что-то решает ?
Philippe Mori
Даже оригинального кода должно было хватить... На самом деле, если ОП используется ?:
- он должен знать, что она делает.
0x01AA
Вы правы :) Этого должно быть более "достаточно, чтобы признать основную проблему". Решение div на ноль очень сильно зависит от задачи.
0x01AA
Но я думаю, что именно это загадочное испытание является его единственным (по крайней мере, его большим) Проблема * смех*
уупс, только что признал, что мне не следует писать здесь, кто-то любит меня понижать :(