Member 12349103 Ответов: 2

C# winform простая математика не складывается


У меня есть Winform и событие Texchange, 3 textbox. box1 минус box 2 умножить на label = box3.

Я искал его несколько дней.

пожалуйста помочь.

опыт:
(1.120-0.980) х 129 = 18.1

код возвращает
(1.120-0.980) x 129 = -127.505


private void tb_Percentage_TextChanged(object sender, EventArgs e)
        {
            double d1, d2, d3;
            if (!double.TryParse(tb_Start.Text, out d1))
            {
                //MessageBox.Show(string.Format("{0.00} is not a number", tb_Start.Text));
                //return;
            }
            if (!double.TryParse(tb_Finished.Text, out d2))
            {
                //MessageBox.Show(string.Format("{0.00} is not a number", tb_Fermented.Text));
                //return;
            }

            if (!double.TryParse(label10.Text, out d3))
            {
                //MessageBox.Show(string.Format("{0.00} is not a number", tb_Start.Text));
                //return;
            }

            tb_Percentage.Text = (d1 - d2 * d3).ToString("#.000");


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

decimal val8 = Convert.ToDecimal(tb_Start.Text);
            decimal val9 = Convert.ToDecimal(label10.Text);
            decimal val10 = Convert.ToDecimal(tb_Finished.Text);
            decimal val11 = val8 - val10 * val9;
            tb_Percentage.Text = Convert.ToString(val11);



int Start, Finished, c1;

                int.TryParse(tb_Start.Text, out Start);

                int.TryParse(tb_Finished.Text, out Finished);

                int.TryParse(label10.Text, out c1);


                tb_Percentage.Text = (Start - Finished * c1).ToString();

Member 12349103

Оба ответа помогли мне сегодня кое-чему научиться, спасибо вам обоим.

2 Ответов

Рейтинг:
7

Patrice T

Цитата:
Я искал его несколько дней.

И вы никогда не пытались добавить скобки, как в Примере, который вы дали ?
(1.120-0.980) х 129 = 18,1
tb_Percentage.Text = (d1 - d2 * d3).ToString("#.000");

Поскольку C# уважает приоритет операторов умножения и вычитания, это означает, что:
tb_Percentage.Text = (d1 - (d2 * d3)).ToString("#.000");

Коррекция должна быть легкой оттуда.


MadMyche

+5

Patrice T

Спасибо

Рейтинг:
14

MadMyche

Ваша проблема, похоже, связана с порядок операций; похоже, вы хотите, чтобы ответ был основан на арифметических правилах (слева направо), но ваша программа на самом деле следует алгебраическим правилам.

Способ исправить это-добавить некоторые скобки к операции, которую вы хотите выполнить в первую очередь.
tb_Percentage.Text = ((d1 - d2) * d3).ToString("#.000");

Базовая Алгебра/введение в основные идеи алгебры/порядок операций - Wikibooks[^]


Patrice T

+5

MadMyche

И спасибо тебе тоже