Member 12349103 Ответов: 1

Как сделать округление текстового поля


Я думал, что округляю правильно, но похоже, что я установил значение textBox4, прежде чем использовать его в делении для получения значения textBox5. Раундап должен быть в первой части кода, но я не могу его понять. Кто-нибудь может помочь?

var roundedInput = Math.Round(tbTrailer_Needed, 2, MidpointRounding.AwayFromZero);

if (!String.IsNullOrEmpty(tbSnp_Day.Text) && !string.IsNullOrEmpty(cbSnp_Uld_Trl.Text))
    tbTrailer_Needed.Text  =  (Convert.ToInt32(tbSnp_Day.Text) / Convert.ToInt32(cbSnp_Uld_Trl.Text)).ToString();


Что я уже пробовал:

Математика.Круглый, режим MidpointRounding

#realJSOP

Проверьте исходный код, который вы вставили. Похоже, все перепуталось.

Member 12349103

Я удалил математику.Потолок из второго оператора If и добавил его к первому и получил сообщение об ошибке textbox не может быть использован в этом meathod

Philippe Mori

Напишите читаемый код... Может быть, ты поймешь это или кто-нибудь поможет тебе...

an0ther1

Используйте свой отладчик, значения не те, что вы на самом деле ожидаете.
Например - когда вы делите int на int, вы всегда получите int (например: 10/3 = 3, 9/3 = 3)
Математика.Потолок округлится, математика.Floor будет округляться вниз & оба требуют либо двойного, либо десятичного значения.

1 Ответов

Рейтинг:
6

OriginalGriff

Во - первых, округление работает только со значениями с плавающей запятой-попытка округлить целые числа не сработает.
Во-вторых, деление любого числа (кроме нуля) само по себе всегда даст одно и то же значение: единицу. А предельное значение единицы равно единице.
В-третьих, сделайте себе одолжение и перестаньте использовать имена Visual Studio по умолчанию для всего - вы можете помнить, что" TextBox8 " - это номер мобильного телефона сегодня, но когда вам нужно будет изменить его через три недели, вы это сделаете? Используйте описательные имена - например, "tbMobileNo" - и ваш код станет легче читать, более самодокументируемым, более легким в обслуживании-и на удивление быстрее кодировать, потому что Intellisense может добраться до" tbMobile "за три нажатия клавиш, где" TextBox8 " занимает размышление и 8 нажатий клавиш...

Сначала выполните преобразования - и вместо этого используйте TryParse, так как он позволяет вам реагировать на ошибки пользовательского ввода вместо сбоя приложения, - затем используйте преобразованные значения и, наконец, генерируйте выходные данные:

double myValue;
if (string.IsNullOrWhitespace(myTextBox.Text) || !double.TryParse(myTextBox.Text, out myValue))
   {
   // Report problem to user
   return;
   }
double myOtherValue;
...
//Use myValue and myOtherValue, and myYetAnotherValue here and generate your results.
double myResult = ...
//And finally output.
myOutputTextBox.Text = myResult.ToString();
Это намного яснее, что происходит, и намного проще отлаживать, где есть проблема.


OriginalGriff

- Простите? Вы хотите попробовать это еще раз, но объяснить более подробно-потому что это мало или ничего не значит для меня как предложение...

Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.

OriginalGriff

Поэтому преобразуйте все значения в двойники, используя код, который я дал вам вчера, а затем округлите его.
Вы не можете просто ожидать, что передадите целое текстовое поле математическому методу - он не знает, что с ним делать!

OriginalGriff

Прекратите приставлять к переменным префиксы типа "tb", пока не узнаете, что это значит и почему некоторые старые разработчики делают это: в данном случае это означает, что переменная является текстовым полем, которым она явно не является.
Используйте IsNullOrWhiteSpace вместо IsNullOrEmpty - он делает то же самое, но отбрасывает записи, которые также являются пробелами.
А затем используйте TryParse вместо Convert - он проверяет наличие ошибок пользователя, а не сбой вашего приложения.
Прочтите то, что я написал, вместо того, чтобы игнорировать код - или вообще нет никакого смысла его печатать!

OriginalGriff

Нет, это не так:

двойной tbTrailer_Needed;

Это двойник...

Member 12349103

Который возвращает значение textbox Trailer_Needed