Преобразование строки к числу
Цитата: Тимур от 15.11.2021, 21:38Добрый вечер! Есть проблема. Мне нужно допустим из того что находиться в label.Text, а там "52 + 42" вывести значение суммы в отдельную переменную. В коде, который ниже предоставлен, у меня возникает ошибка при компиляции. Помогите пожалуйста
label1.Text = "52 + 42"; int f = int.Parse(label1.Text); label1.Text = f.ToString();
Добрый вечер! Есть проблема. Мне нужно допустим из того что находиться в label.Text, а там "52 + 42" вывести значение суммы в отдельную переменную. В коде, который ниже предоставлен, у меня возникает ошибка при компиляции. Помогите пожалуйста
label1.Text = "52 + 42"; int f = int.Parse(label1.Text); label1.Text = f.ToString();
Цитата: XpucT от 15.11.2021, 21:42Добрый 🖐
+не относится к int, поэтому его нельзя спарсить.
Или другими словами: математическое выражение ≠ числу.
Добрый 🖐
Скопировано+ не относится к int, поэтому его нельзя спарсить.
Или другими словами: математическое выражение ≠ числу.
Цитата: Тимур от 15.11.2021, 21:44И как обойти эту проблему? Допустим у меня калькулятор
И как обойти эту проблему? Допустим у меня калькулятор
Цитата: XpucT от 15.11.2021, 22:26Очевидно, что нельзя брать данные из label1.
Для этого есть переменные, в которые и нужно сразу писать.
label1 нужен только для отрисовки.
Это две параллельные задачи.
Очевидно, что нельзя брать данные из label1.
Для этого есть переменные, в которые и нужно сразу писать.
label1 нужен только для отрисовки.
Это две параллельные задачи.
Цитата: Вася от 15.11.2021, 23:38Добрый вечер! Можно так:
string str = "52 + 42"; int res = (int)new DataTable().Compute(str, null);
Добрый вечер! Можно так:
string str = "52 + 42"; int res = (int)new DataTable().Compute(str, null);
Цитата: Тимур от 16.11.2021, 18:09Цитата: Вася от 15.11.2021, 23:38Добрый вечер! Можно так:
string str = "52 + 42";int res = (int)new DataTable().Compute(str, null);string str = "52 + 42"; int res = (int)new DataTable().Compute(str, null);string str = "52 + 42"; int res = (int)new DataTable().Compute(str, null);Да, Василий. Спасибо . Ваша Идея мне помогла. Но к сожалению, данный метод работает только для двух чисел. Можно ли как- то сделать универсальный метод, допустим для калькулятора.
Цитата: Вася от 15.11.2021, 23:38Добрый вечер! Можно так:
string str = "52 + 42";int res = (int)new DataTable().Compute(str, null);string str = "52 + 42"; int res = (int)new DataTable().Compute(str, null);string str = "52 + 42"; int res = (int)new DataTable().Compute(str, null);
Да, Василий. Спасибо . Ваша Идея мне помогла. Но к сожалению, данный метод работает только для двух чисел. Можно ли как- то сделать универсальный метод, допустим для калькулятора.
Цитата: Вася от 16.11.2021, 19:09Должно работать для разных выражений, таких как
(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно в этом проблема.
Должно работать для разных выражений, таких как Скопировано(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно в этом проблема.
Цитата: Adler от 16.11.2021, 19:32Цитата: Вася от 16.11.2021, 19:09Должно работать для разных выражений, таких как
(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно в этом проблема.Приветствую.
Я конечно могу ошибаться, но такие выражения так одной строкой не решаются. Это задачка больше на создание логического алгоритма, где нужно все распарсить, расставить приоритеры, между чем и чем происходит операция и в какой последовательности. В итоге у вас должно получиться несколько операций, в которых участвуют не более 2х чисел.
Т.е. в вашем случае это
- 52+42
- 94/5
- 18.8*3
- 56.4-24
Итого 32.4 (если правильно все посчитал).
Это простой пример, но может же быть и так: 56-(43-21/7+2)*3
Где последовательно уже не решишь и нужно это разбирать, что в какойтпоследовательности решается.Написать такой калькулятор, это не такая уж и простая задача, как может показаться.
Цитата: Вася от 16.11.2021, 19:09Должно работать для разных выражений, таких как
Скопировано(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно в этом проблема.
Приветствую.
Я конечно могу ошибаться, но такие выражения так одной строкой не решаются. Это задачка больше на создание логического алгоритма, где нужно все распарсить, расставить приоритеры, между чем и чем происходит операция и в какой последовательности. В итоге у вас должно получиться несколько операций, в которых участвуют не более 2х чисел.
Т.е. в вашем случае это
- 52+42
- 94/5
- 18.8*3
- 56.4-24
Итого 32.4 (если правильно все посчитал).
Это простой пример, но может же быть и так: 56-(43-21/7+2)*3
Где последовательно уже не решишь и нужно это разбирать, что в какойтпоследовательности решается.
Написать такой калькулятор, это не такая уж и простая задача, как может показаться.
Цитата: Тимур от 16.11.2021, 19:39Цитата: Вася от 16.11.2021, 19:09Должно работать для разных выражений, таких как
(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно в этом проблема.Да, но если переводить в double, то мне нужно проверять какой текст получиться в label1.Text, потому что 3+2 операцию с таким кодом я не могу сделать, а вот 3/2 могу. Есть ли какой то макет, на подобии "*." который будет проверять, получится ли double там? Или как легче это обойти?
string str = label1.Text; double res = (double)new DataTable().Compute(str, null); label1.Text = res.ToString();
И да, извините что так часто обращаюсь. Я сейчас не многое понимаю т.к новичок, вижу идею в голове и не могу её реализовать, а люди в гугле строят ракеты, которые не на Марс летят, а на Венеру, куда мне не надо
Цитата: Вася от 16.11.2021, 19:09Должно работать для разных выражений, таких как
Скопировано(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно в этом проблема.
Да, но если переводить в double, то мне нужно проверять какой текст получиться в label1.Text, потому что 3+2 операцию с таким кодом я не могу сделать, а вот 3/2 могу. Есть ли какой то макет, на подобии "*." который будет проверять, получится ли double там? Или как легче это обойти?
string str = label1.Text;
double res = (double)new DataTable().Compute(str, null);
label1.Text = res.ToString();
И да, извините что так часто обращаюсь. Я сейчас не многое понимаю т.к новичок, вижу идею в голове и не могу её реализовать, а люди в гугле строят ракеты, которые не на Марс летят, а на Венеру, куда мне не надо
Цитата: Вася от 16.11.2021, 20:05Цитата: Adler от 16.11.2021, 19:32нужно все распарсить, расставить приоритеры, между чем и чем происходит операция и в какой последовательности
Метод Compute это всё делает.
Видать надо было не приводить тип, а конвертировать:
double res = Convert.ToDouble(new DataTable().Compute(str, null));Теперь работает.
Цитата: Adler от 16.11.2021, 19:32нужно все распарсить, расставить приоритеры, между чем и чем происходит операция и в какой последовательности
Метод Compute это всё делает.
Видать надо было не приводить тип, а конвертировать:
double res = Convert.ToDouble(new DataTable().Compute(str, null));
Теперь работает.
Цитата: Тимур от 16.11.2021, 20:33Осталась единственная проблема, как мне выводить число с начала label1.text , он у меня уходит с 270 по x на 10 каждое нажатие на кнопку. Проблема в том, что мне нужно вывести результат с начала строки, но учитывая кол-во символов результата. Т.е мне нужно изначально знать сколько будет символов в результате
Осталась единственная проблема, как мне выводить число с начала label1.text , он у меня уходит с 270 по x на 10 каждое нажатие на кнопку. Проблема в том, что мне нужно вывести результат с начала строки, но учитывая кол-во символов результата. Т.е мне нужно изначально знать сколько будет символов в результате
Цитата: Вася от 16.11.2021, 20:48Не совсем понял, но количество символов можно подсчитать так:
int length = res.ToString().Length;
Не совсем понял, но количество символов можно подсчитать так:
int length = res.ToString().Length;
Цитата: Тимур от 16.11.2021, 21:03Да, вы всё правильно поняли) Спасибо огромное, что помогли на протяжении не одной сотни компиляции моего калькулятора. Хотелось бы скинуть вам код, чтобы вы могли отрефакторить его возможно, а может что то подсказать. Могу ли я это сделать? Мне осталось лишь реализовать кнопку процентов. И сейчас я над этим думаю
Да, вы всё правильно поняли) Спасибо огромное, что помогли на протяжении не одной сотни компиляции моего калькулятора. Хотелось бы скинуть вам код, чтобы вы могли отрефакторить его возможно, а может что то подсказать. Могу ли я это сделать? Мне осталось лишь реализовать кнопку процентов. И сейчас я над этим думаю
Цитата: Тимур от 16.11.2021, 21:25И уже не первый раз сталкиваюсь с бесячей проблемой: Как мне установить кнопку в конструкторе так, чтобы она не прикреплялась к панели, которая занимает то место, куда я поставлю кнопку? Мне либо надо делать не просто прямоугольную панель, а как то её модифицировать, либо я думаю люди из Microsoft уже решение такой проблеме придумали. Хочется всё таки не усложнять форму панели, а услышать как решить без данного модифицирования.
И уже не первый раз сталкиваюсь с бесячей проблемой: Как мне установить кнопку в конструкторе так, чтобы она не прикреплялась к панели, которая занимает то место, куда я поставлю кнопку? Мне либо надо делать не просто прямоугольную панель, а как то её модифицировать, либо я думаю люди из Microsoft уже решение такой проблеме придумали. Хочется всё таки не усложнять форму панели, а услышать как решить без данного модифицирования.