Вы должны войти, чтобы создавать сообщения и темы.

Преобразование строки к числу

Страница 1 из 3► 3

Добрый вечер! Есть проблема. Мне нужно допустим из того что находиться в label.Text, а там "52 + 42" вывести значение суммы в отдельную переменную. В коде, который ниже предоставлен, у меня возникает ошибка при компиляции. Помогите пожалуйста

label1.Text = "52 + 42";
 int f = int.Parse(label1.Text);
  label1.Text = f.ToString();

 

Добрый 🖐
Скопировано+ не относится к int, поэтому его нельзя спарсить.
Или другими словами: математическое выражение ≠ числу.

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

И как обойти эту проблему? Допустим у меня калькулятор

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

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Добрый вечер! Можно так:

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);

Да, Василий. Спасибо . Ваша Идея мне помогла. Но к сожалению, данный метод работает только для двух чисел. Можно ли как- то сделать универсальный метод, допустим для калькулятора.

Должно работать для разных выражений, таких как Скопировано(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно  в этом проблема.

Лайкнул Тимур
Тимур
Цитата: Вася от 16.11.2021, 19:09

Должно работать для разных выражений, таких как Скопировано(52 + 42) / 5 * 3 - 24. Поменяйте int на double, возможно  в этом проблема.

Приветствую.
Я конечно могу ошибаться, но такие выражения так одной строкой не решаются. Это задачка больше на создание логического алгоритма, где нужно все распарсить, расставить приоритеры, между чем и чем происходит операция и в какой последовательности. В итоге у вас должно получиться несколько операций, в которых участвуют не более 2х чисел.
Т.е. в вашем случае это 

  1. 52+42
  2. 94/5
  3. 18.8*3
  4. 56.4-24

Итого 32.4 (если правильно все посчитал).
Это простой пример, но может же быть и так: 56-(43-21/7+2)*3
Где последовательно уже не решишь и нужно это разбирать, что в какойтпоследовательности решается.

Написать такой калькулятор, это не такая уж и простая задача, как может показаться.

Цитата: Вася от 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();

 

И да, извините что так часто обращаюсь. Я сейчас не многое понимаю т.к новичок, вижу идею в голове и не могу её реализовать, а люди в гугле строят ракеты, которые не на Марс летят, а на Венеру, куда мне не надо

Цитата: Adler от 16.11.2021, 19:32

нужно все распарсить, расставить приоритеры, между чем и чем происходит операция и в какой последовательности

Метод Compute это всё делает.

Видать надо было не приводить тип, а конвертировать:

double res = Convert.ToDouble(new DataTable().Compute(str, null));

Теперь работает.

Лайкнул Тимур
Тимур

Осталась единственная проблема, как мне выводить число с начала label1.text , он у меня уходит с 270 по x на 10 каждое нажатие на кнопку. Проблема в том, что мне нужно вывести результат с начала строки, но учитывая кол-во символов результата. Т.е мне нужно изначально знать сколько будет символов в результате

Не совсем понял, но количество символов можно подсчитать так:

int length = res.ToString().Length;
Лайкнул Тимур
Тимур

Да, вы всё правильно поняли) Спасибо огромное, что помогли на протяжении не одной сотни компиляции моего калькулятора. Хотелось бы скинуть вам код, чтобы вы могли отрефакторить его возможно, а может что то подсказать. Могу ли я это сделать? Мне осталось лишь реализовать кнопку процентов. И сейчас я над этим думаю

И уже не первый раз сталкиваюсь с бесячей проблемой: Как мне установить кнопку в конструкторе так, чтобы она не прикреплялась к панели, которая занимает то место, куда я поставлю кнопку? Мне либо надо делать не просто прямоугольную панель, а как то её модифицировать, либо я думаю люди из Microsoft уже решение такой проблеме придумали. Хочется всё таки не усложнять форму панели, а услышать как решить без данного модифицирования.

Страница 1 из 3► 3