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

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

1◄Страница 3 из 3
Цитата: Тимур от 25.11.2021, 18:37

Здравствуйте! Я не до конца объяснил ситуацию(но уже сам реализовал корень). Во-первых я сразу понял, что мне нужно будет находить число под знаком радикала, использовать метод Math.Sqrt и дальше передавать это значение в Compute(). Проблема скорее уже немного поменялась. Реализовать то я почти смог и думаю смогу, но то ли из-за шрифта, то ли из-за непонятно чего, в результате в label1 заносится текст, который мне не соответствует. Объясню: на клавиатуре нет знака радикала, как и степени, но я нашёл их в интернете. Поменяв текст button, которые и отвечают за выполнение этих задач, при нажатии я увидел, что это √ превращается в @, а ^ становится чем то похожим на 2 палочки. Ну т.е. совсем не то, что я ожидал увидеть. Очень хочется узнать, проблема в шрифте?Если да, то какой лучше выбрать? Или в чём тогда? И как же добавить символы, как на скриншоте. Я не всё еще знаю, да вроде и не должен.

Хм, проблему нашёл. Дело было в ублюдском шрифте на label1. Пойду дальше реализовывать корень, ибо это не легкая задача для меня!

Цитата: Вася от 24.11.2021, 17:29

Здравствуйте. Прежде чем загонять уравнение в метод Compute(), можно решить часть уравнения с возведением в степень или взятием кореня. Например есть 2 + 5^3 * 7 и из этого делаем 2 + 125 * 7 и загоняем в Compute(). Тут уже надо парсить. Квадратный корень можно заменить на x^0.5. Символы ^ и √ добавляются так же как и другие.

Добрый вечер! Снова я со своими вопросами.  Абы- как при помощи магии, вроде, реализовал корень. Конечно там есть огромные НО, на которые пока можете не смотреть. О чём же я вас желаю спросить? А вот о чём. Проблема опять похоже в знаке запятой и точки в числах с плавающим знаком. Сделал всё также, но не получается так, как в обычных вычислениях. Думаю без всего проекта вам не разобрать поэтому Ссылка.
Не вижу другой проблемы, почему тогда текст не воспринимается компилятором. Написал пару комментариев для себя лично и возможно и вам помогут они. Спасибо огромное заранее!

Добрый! Указывать региональные настройки надо везде, где есть конвертации строки в число и наоборот. У Вас на 216 строке их не указано, поэтому и возникала ошибка (например √0.25).

label1.Text = Math.Sqrt(Convert.ToDouble(label1.Text.Substring(1), numberFormatInfo)).ToString(numberFormatInfo);

Теперь насчёт ошибки на 209 строке. На вход в метод Compute() приходит запятая вместо точки в дробном числе, потому что в 187 строке не указаны региональные настройки в методе ToString().

ss += res.ToString(numberFormatInfo) + lines[a];

208 строка в этом случае не имеет смысла, так как строка конвертируется в строку и указание региональных настроек не заменяет запятую на точку.

Лайкнули ЯR и Тимур
ЯRТимур
Цитата: Вася от 18.12.2021, 12:05

Добрый! Указывать региональные настройки надо везде, где есть конвертации строки в число и наоборот. У Вас на 216 строке их не указано, поэтому и возникала ошибка (например √0.25).

 
 
 
 
label1.Text = Math.Sqrt(Convert.ToDouble(label1.Text.Substring(1), numberFormatInfo)).ToString(numberFormatInfo);
label1.Text = Math.Sqrt(Convert.ToDouble(label1.Text.Substring(1), numberFormatInfo)).ToString(numberFormatInfo);
 
label1.Text = Math.Sqrt(Convert.ToDouble(label1.Text.Substring(1), numberFormatInfo)).ToString(numberFormatInfo);

Теперь насчёт ошибки на 209 строке. На вход в метод Compute() приходит запятая вместо точки в дробном числе, потому что в 187 строке не указаны региональные настройки в методе ToString().

 
 
 
 
ss += res.ToString(numberFormatInfo) + lines[a];
ss += res.ToString(numberFormatInfo) + lines[a];
 
ss += res.ToString(numberFormatInfo) + lines[a];

208 строка в этом случае не имеет смысла, так как строка конвертируется в строку и указание региональных настроек не заменяет запятую на точку.

Ух ты. Да, я так и думал, что везде надо ставить региональные настройки, но внимательности не хватило, чтобы заметить, где они нужны. Спасибо большое. С вашим последним ответом наконец реализовал корень, осталось лишь возведение в степень. И придётся менять конструкцию знака равно, ибо писал только для отдельного случая, т.е когда есть знак корня. С добавление всего нового, придется постоянно добавлять еще как минимум одно IF. Думаю, у меня ещё будет, что у вас надо будет спросить. Извиняюсь , что возможно трачу Ваше время на вещи, которые занимать могут 10 секунд у меня, а для Вас намного больше. 

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