C# math.max не возвращает результатов.
Я хочу получить максимальное значение между 2 столбцами и вернуть его в третий столбец, если они совпадают с этими значениями.
Каждая строка в отладке показывает значение. за исключением d3, где значение должно быть помещено после того, как оно определяет самое высокое значение.
Идеи о том, что я делаю неправильно?
Образ Degug
Image - TinyPic - бесплатный хостинг изображений, обмен фотографиями и видеохостинг[^]
decimal d1 = decimal.Parse(string.IsNullOrEmpty(rows.Cells[41].Value.ToString()) ? "0" : rows.Cells[41].Value.ToString()); decimal d2 = decimal.Parse(string.IsNullOrEmpty(rows.Cells[46].Value.ToString()) ? "0" : rows.Cells[46].Value.ToString()); decimal d3 = decimal.Parse(string.IsNullOrEmpty(rows.Cells[37].Value.ToString()) ? "0" : rows.Cells[37].Value.ToString()); decimal AL = Math.Max(d1, d2); AL = Math.Max(d3,AL);
Что я уже пробовал:
приведенный выше код должен работать, возвращаемый столбец является пустым st start with.
Eric Lynch
Здесь отладчик-ваш друг. Вещи, которые я бы исследовал в отладчике...
1) Каковы значения ваших входных столбцов: строк.Ячейки[41].значение, строки.Ячейки[46].значение и строки.Ячейки[37].Значение?
2) Каковы результаты ваших преобразований: d1, d2 и d3?
3) каков результат вашей промежуточной максимальной операции: AL?
4) каков результат вашей окончательной максимальной операции: AL?
5) каков ваш ожидаемый результат и чем он отличается от вашего фактического результата?
Я гарантирую, что одна из этих вещей (вероятно, пункты 1 или 2) - это не то, что вы думаете.
Люди здесь не могут видеть ваш экран или запустить отладчик для вас, поэтому мы находимся в невыгодном положении.
Как минимум, вы должны улучшить свой вопрос, чтобы указать фактические входные значения (столбцы 37, 41 и 46), фактическое выходное значение (AL) и ожидаемое выходное значение. Если возникнут какие-либо ошибки, вы также должны включить эту информацию.
Кстати, вместо запятой.Разбор, вы можете хотеть рассматривать десятичные.Метод tryparse. Последнее позволяет вам более эффективно перехватывать и обрабатывать недопустимые входные данные.
0x01AA
"Каждая строка в debug показывает значение. за исключением d3...." Что это значит? Как d3 может не показывать значение?
Member 12349103
Я загрузил ссылку на отладчик, не зная, как добавить изображение
d1=28,444
d2=28,444
d3=0
AL=28,444
0x01AA
А что плохого в результате? AL действительно имеет значение, которое я ожидал бы, потому что Max(d1, d2) - это 28.444, которое вы сначала храните в AL, и поэтому Max(d3, AL) снова вернет 28.444 (и снова назначит AL), потому что d3 кажется нулевым.... Я не вижу в этом проблемы...
Eric Lynch
Надеюсь, это не двойной пост. Мой предыдущий комментарий, похоже, отсутствует.
Как отмечает 0x01AA, правильный (математический) максимум для этих трех чисел (0, 28.444 и 28.444) равен 28.444. А чего ты ожидал?
В более раннем комментарии вы утверждаете, что отладчик "не показывает значение" для d3. Это вызывает недоумение в двух отношениях. Во-первых, это должно быть невозможно для типа значения (который по умолчанию равен нулю). Во-вторых, это не согласуется с приведенным выше утверждением...что значение d3 равно "0".
Возможно, вы забыли поделиться тем, что произошло исключение (и поделиться текстом исключения)?
Я еще раз повторю, что IsNullOrEmpty-это не единственный недопустимый входной текст. Например, "Микки Маус" не является допустимым десятичным числом. Вот почему я настоятельно рекомендую вам либо добавить блок try/catch, либо использовать decimal.TryParse вместо decimal.Parse.