Как предотвратить множественные точки в калькуляторе js и как преобразовать число в его противоположное значение - PullRequest
0 голосов
/ 01 ноября 2018

Я делаю калькулятор JS, и у меня проблема только с двумя этапами моего кода.

Первый, когда я пытаюсь сменить знак

 else if (textbox.value == "+/-") {
                textbox.value = -Math.sign(textbox.value) * textbox.value
        }

а также, когда я добавляю точку к уравнению, она добавляется несколько раз, как показано ниже

else if (!String(textbox.value).includes(".") && textbox.value != "") {
                textbox.value += "."
            }

Эти два кода не работают должным образом. Я был бы рад, если бы вы помогли. Вот полный код, если вам нужно:

        var nums = document.getElementById("num")
        var operator = document.getElementById("ope")
        var textbox = document.getElementById("txtBox")
        var counter = 0

        function Click(e) {
            var but = e.target;
            var maxamount = 9;
            var dot = 1
            if (but.innerText != "=" && but.innerText != "delete") {
                textbox.value += but.innerText
                if (but.innerText == "C") {
                    textbox.value = "0"
                }
                else if (textbox.value[0] == "." || textbox.value[0] == "0" || textbox.value[0] == "+" || textbox.value[0] == "-" || textbox.value[0] == "/" || textbox.value[0] == "*") {
                    textbox.value = ""
                }
                else if (textbox.value.length > maxamount) {
                    textbox.value = textbox.value.substring(0, maxamount)
                }
                else if (!String(textbox.value).includes(".") && textbox.value != "") {
                    textbox.value += "."
                }
            }

            else {
                textbox.value = eval(textbox.value)
            }
            if (but.innerText == "delete") {
                textbox.value = textbox.value.substring(0, textbox.value.length - 1);
            }
            else if (textbox.value == "NaN" || textbox.value == "undefine") {
                textbox.value = ""
            }
            else if (textbox.value == "+/-") {
                textbox.value = -Math.sign(textbox.value) * textbox.value
            }
        }
            button {
                user-select: none; 
                font-size:23px; 
                width:80px ; 
                height: 70px; 
                font-family:bold;
                border-radius: 50%;
                border-color: gray;
            }
            .ope{
                background: rgb(96, 250, 199);
            }
            .num:focus {
                background: lime;
            }
    <input id="txtBox" type="text" style="text-align: right;font-size:60px;width: 325px;height: 125px; font-family: bold;" />
    <br />
    <button onclick="Click(event)" class="ope">C</button>
    <button onclick="Click(event)" class="ope">delete</button>
    <button onclick="Click(event)" class="ope">+/-</button>
    <button onclick="Click(event)" class="ope">+</button>

    <br />

    <button onclick="Click(event)" class="num">1</button>
    <button onclick="Click(event)" class="num">2</button>
    <button onclick="Click(event)" class="num">3</button>
    <button onclick="Click(event)" class="ope">-</button>

    <br />

    <button onclick="Click(event)" class="num">4</button>
    <button onclick="Click(event)" class="num">5</button>
    <button onclick="Click(event)" class="num">6</button>
    <button onclick="Click(event)" class="ope">*</button>

    <br />

    <button onclick="Click(event)" class="num">7</button>
    <button onclick="Click(event)" class="num">8</button>
    <button onclick="Click(event)" class="num">9</button>
    <button onclick="Click(event)" class="ope">/</button>

    <br />

    <button onclick="Click(event)" class="num">0</button>
    <button onclick="Click(event)" id="ope">.</button>
    <button onclick="Click(event)" id="equalto" style="background: rgb(206, 37, 206);user-select: none;font-size:25px; width:160px ; height: 70px; font-family:bold;">=</button>

1 Ответ

0 голосов
/ 01 ноября 2018

переключаясь между отрицательными / положительными числами, умножьте на -1 и убедитесь, что указана кнопка +/- кнопка

else if (textbox.value == "+/-") {
  textbox.value *= -1
}

для добавления точки необходимо три правила

a- если точки еще нет

b-, если строка не пуста

c-, если нажатая кнопка является точечной кнопкой

else if (!textbox.value.includes('.') && but.innerText === '.' && textbox.value.length) {
  textbox.value += "."
}
...