умножение или деление не работает правильно, когда второе число отрицательно - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь написать Windows 7S калькулятор, но у меня есть проблемы только в умножении и делении.здесь я пишу коды, которые связаны с умножением, чтобы вы могли понять причину.

    double input1;
    double input2;
    double result;
    string amalgar;

amalgar означает + или - или * или /

private void button14_Click(object sender, EventArgs e)
    {
        input1 = Convert.ToDouble(textBox1.Text);
        textBox1.Clear();
        amalgar = "*";


    }

это было для кнопки *.

это для кнопки отрицания:

private void button20_Click(object sender, EventArgs e)
    {
        input1 = Convert.ToDouble(textBox1.Text);
        input1 = input1 * (-1);
        textBox1.Text = input1.ToString();
    }

и для равной кнопки:

input2 = Convert.ToDouble(textBox1.Text);
if (amalgar == "*")
        {
            result = (input1 * input2);
            textBox1.Text = Convert.ToString(result);
        }

вот несколько примеров результатов:

2*6=12      Right
 2*(-2)=4    Wrong
 (-2)*2=-4   R
 4*(-5)=25   W
 8*(-7)=49   W
 3*(-6)=36   W
 8/2=4       R
 8/(-2)=1    W
 8/(-3)=1    W

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

я решил. Это была простая ошибка.

проблема была в кнопке отрицания, когда я пытался умножить input1 на -1.

я изменил код на:

input3 = Convert.ToDouble(textBox1.Text);
            qarine = input3 * (-1);
            textBox1.Text = qarine.ToString();

в этой кнопке и некоторые пункты в одинаковой кнопке:

else if (amalgar == "*")
        {
            if (input1 > 0 && input2 > 0)
            {
                result = (input1 * input2);
            }
            else if (input1 < 0 && input2 < 0)
            {
                result = (input1 * input2);
            }

            else if (input1 < 0 && input2 > 0)
            {
                result = (qarine * input2);
            }

            else if (input1 > 0 && input2 < 0)
            {
                result = (input1 * qarine);
            }

            textBox1.Text = Convert.ToString(result);
        }
0 голосов
/ 18 сентября 2018

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

private void button20_Click(object sender, EventArgs e)
    {
        input1 = Convert.ToDouble(textBox1.Text); // These lines overwrite
        input1 = input1 * (-1);                   // anything in input1
        textBox1.Text = input1.ToString();
    }

Чтобы при переходе к коду равенства, ввод 2и ввод 1 всегда один и тот же номер, если последней нажатой была отрицательная кнопка.

input2 = Convert.ToDouble(textBox1.Text); // this equals input1 if the last thing
                                          // you pressed was the negative button
if (amalgar == "*")
        { // ....

В button20_Click вам нужно изменить содержимое textBox1 без перезаписи input1.Вы можете попробовать использовать локальную переменную для выполнения всех ваших расчетов:

double modifiedInput = Convert.ToDouble(textBox1.Text);
modifiedInput = modifiedInput * (-1);
textBox1.Text = modifiedInput.ToString();
...