JavaScript, если заявление глючит - PullRequest
0 голосов
/ 14 марта 2019

Так что мне нужно написать код, который умножает все натуральные числа в предоставленном пользователем интервале.

Код содержит тест, который a> b, но он работает только до b> = 10. Например, если (a == 8) и (b == 9), оператор работает правильно, но как только (a == 8) и (b> = 10), отображается предупреждение «Число a должно быть меньше числа b» (даже если 8 явно меньше 10).

А если input (a == 10) и (b == 8), то оператор выполняется, даже если явно не должен.

Я надеюсь, что кто-то может помочь мне найти ошибку в коде.

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

        <!DOCTYPE html>
<html>
<head>
    <title>Intervala reizinajums</title>
</head>
<body>
<form id="myForm">
    <label for="int_a">Ievadi a: </label>
    <input type="number" name="int_a" id="a" style="width: 30px">
    <br>
    <br>
    <label for="int_b">Ievadi b: </label>
    <input type="number" name="int_b" id="b" style="width: 30px">
    <br>
    <button type="submit" onclick=" return reizinajums()">OK</button>
    <p id="para"></p>
</form>
<script type="text/javascript">
    function reizinajums() {
        var a = document.forms['myForm']['a'].value; //2
        var b = document.forms['myForm']['b'].value; //4
        var reiz = 1;

        if (a<=0 && b<=0) {alert ('This interval doesn`t content any natural numbers'); 
        return false;}

        if (a>b) {
            alert ('Number a has to be less than number b');
            return false;
        }

        else {  //(if a < b) Finds all natural numbers in interval and multiplies them
        while(a<=b){
            if (a<=0) {a=1;}
            reiz = reiz * a;
            a ++; 
        }
    document.getElementById('para').innerHTML= 'Intervala '+document.forms['myForm']['a'].value+' - '+document.forms['myForm']['b'].value+' naturalo skaitlu reizinajums ir ' + reiz;
            return false;
    }
}
</script>

</body>
</html>

1 Ответ

3 голосов
/ 14 марта 2019

Причина

 "10" > "8" // false

Строки сравниваются лексически, поэтому каждый символ сравнивается слева направо, пока не произойдет первое различие. в данном случае это «1» и «8», а 8 больше 1. Возможно, вы захотите проанализировать строки как числа:

 var a = parseInt(/*stuff*/.value, 10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...