Computer Wiz99 Ответов: 3

Ошибка кода округления в коде позади


У меня есть два текстовых поля в веб-форме. Thextbox1 имеет текстовое изменение textbox, а textbox2 показывает ответ. Я пытаюсь заставить textbx2 округлить до ближайшего целого числа при изменении текста текстового поля. У меня возникла ошибка в строке кода округления. Вот код, стоящий за этим:

protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        int w = Convert.ToInt32(TextBox1.Text.Replace(",", ""));
        int v = 0;
        TextBox2.Text = Convert.ToString(w + v);
        RangeValidatorLY1.Validate();
        TextBox2.Text = Math.Round(Convert.ToString(TextBox2.Text), 2);
        TextBox2.Text = string.Format("{0:0,0}", double.Parse(TextBox2.Text));
        TextBox3.Focus();

    }


Что я упускаю?

OriginalGriff

- Что я упускаю?"

Не знаю. Но тогда я не могу видеть ваш экран или понять, что вы ввели...

Что он сделал такого, чего вы не ожидали, или не сделали того, что вы сделали?

Computer Wiz99

на линии: поле textbox2.Текст = Математика.Раунд(Конвертация.ToString(TextBox2.Text), 2);,
Математика.Раунд(Конвертация.ToString(TextBox2.Text), 2); имеет красную линию под ним. Ошибка говорит: лучший перегруженный метод соответствует ' System.Math.Round(decimal)' имеет некоторые недопустимые аргументы. А вторая ошибка гласит: Аргумент 1: не удается преобразовать из 'string' в 'decimal'. Я просто пытаюсь округлить до ближайшего целого числа.

0x01AA

Даже не взглянув на помощь математики.Раунд: но я действительно не думаю, что математика.Раунд ожидает строку для первого параметра.... (?)

3 Ответов

Рейтинг:
25

OriginalGriff

"на линии: TextBox2.Text = математика.Раунд(Конвертация.ToString(TextBox2.Text), 2);,
Математика.Раунд(Конвертация.ToString(TextBox2.Text), 2); имеет красную линию под ним. Ошибка говорит: лучший перегруженный метод соответствует ' System.Math.Round(decimal)' имеет некоторые недопустимые аргументы. А вторая ошибка гласит: Аргумент 1: не удается преобразовать из 'string' в 'decimal'. Я просто пытаюсь округлить до ближайшего целого числа."



Хм. Есть ли у вас привычка преобразовывать строки в другие строки? :смеяться:
Возможно, то, что вы хотели сказать, было:

TextBox2.Text = Math.Round(Convert.ToDouble(TextBox2.Text), 2).ToString();


Но... поскольку вы добавляете два целых числа, чтобы получить строковое значение в первую очередь, округление (по определению) не будет иметь никакого значения вообще... :смеяться:

Извините, но этот код в целом не имеет большого смысла. Что ты на самом деле пытаешься сделать?


Computer Wiz99

OriginalGriff, Спасибо за код. Я просто пытался найти более короткий способ кодирования для округления чисел до ближайшего целого числа без использования Булева. Вы правы, у меня есть привычка превращать струны в другие струны. У меня просто странная идея в голове. Просто проверяю его, чтобы посмотреть, что я могу придумать. Пребывание здесь помогло мне убрать и переделать некоторые кодировки и сделать их лучше. Моя жена сказала, что я похож на ученого-шифровальщика. :смеяться:

Рейтинг:
0

Sergey Alexandrovich Kryukov

Очевидно, вам не нужно округлять, но вам просто нужно представить округленное значение в текстовом поле. Это не одно и то же. Явное округление требуется довольно редко и потенциально опасно, потому что вы можете случайно использовать округленное значение в качестве промежуточного результата, что может привести к потере точности.

То, что вы хотите, должно быть решено с помощью правильного форматирования строк. Пожалуйста смотрите:
http://msdn.microsoft.com/en-us/library/system.double.tostring%28v=vs.110%29.aspx[^],
http://msdn.microsoft.com/en-us/library/26etazsy%28v=vs.110%29.aspx[^],
http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx[^],
http://msdn.microsoft.com/en-us/library/0c899ak8%28v=vs.110%29.aspx[^].

Тем не менее, один разумный случай, чтобы использовать Math.Round это было бы получение целочисленного значения из единицы с плавающей запятой, но я не уверен, что это то, что вам нужно в вашем случае.

Кроме того, им плохо пользоваться Convert для ваших целей. Это синтаксический анализ, поэтому его лучше использовать double.TryParse, который не выбрасывает исключение, но возвращает логический результат успеха. (Вы можете использовать double.Parse тоже, но будьте готовы обрабатывать исключения; недопустимое двойное значение всегда можно ввести в текстовое поле, независимо от того, насколько сильно вы фильтруете ввод).

—СА


Рейтинг:
0

Saurabh 1

//Объявить переменную ceilingvalue
двойное значение потолка = математика.Потолок(Новообращенный.Метод Todouble(Textbox1 Элемент.Текст));
Этикетка 1.Текст = ceilingvalue.Метод toString("#");


CHill60

Я настоятельно советую вам не использовать его Convert.Totype() функции при работе с пользовательским вводом из текстовых полей - у вас нет никакой гарантии, что ввод будет в правильном формате. Используйте type.Parse() или type.TryParse() методы вместо этого