Совместное добавление переменных для выполнения математического уравнения

#javascript #calculator

#javascript #калькулятор

Вопрос:

Недавно я боролся с концепцией калькулятора с использованием JavaScript. Я много чего перепробовал, но просто не могу заставить это работать.

Калькулятор имеет три выпадающих списка: один для первого числа (0-9), один для операции и один для второго числа (также 0-9). По сути, когда вы нажимаете кнопку «Выполнить уравнение», она получает значения из выпадающих списков и предположительно суммирует все эти значения, выполняя уравнение. Вот пример, короткий и простой.

 <select id="n1">
<option value="0">0</option>
<option value="1">1</option>
</select>

<select id="op">
<option value=" ">0</option>
<option value="-">1</option>
</select>


<select id="n2">
<option value="0">0</option>
<option value="1">1</option>
</select>
<input type="button" value="Perform Equation" onclick="perform"/>

<p id="printE"/>

<script>
function perform() {
var analyseN1 = document.getElementById("n1").value
var analyseOp = document.getElementById("op").value
var analyseN2 = document.getElementById("n2").value
var addUp = analyseN1 analyseOp analyseN2;
document.getElementById("printE").innerHTML= addUp;
}
</script>
  

Как вы можете видеть, я получаю значения всех выпадающих списков, «добавляю их», а затем печатаю конечный результат. Однако это не работает. Может кто-нибудь, пожалуйста, скажите мне, почему? Я, ну, не лучший в JavaScript. Я довольно молод и познакомился с языком всего пару месяцев назад. Так что да, если вы знаете ответ, было бы здорово, если бы вы могли мне сказать. Спасибо!

Комментарии:

1. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

2. .value получает строку, используя with strings преформы конкатенации строк. Вам нужно извлечь числовое значение — parseInt например, для целых чисел и parseFloat чисел с плавающей запятой.

3. Что именно вы имеете в виду под «не работает» ? Что происходит, и что вы хотите, чтобы произошло вместо этого?

4. Для Cerbrus: я хочу создать простой калькулятор. Вместо этого он выводит строку, а не результат.

5. Вы, ребята, забываете (/ игнорируете), что вы не можете разобрать оператор .

Ответ №1:

Здесь есть несколько проблем. Во-первых, это имеет два значения в Javascript. Для чисел это означает «плюс», как вы и предполагали. Однако для строк это означает «объединить».

Итак 1 1 = 2 , но "1" "1" = "11" .

Когда вы извлекаете значения из своих <select> элементов, они будут получены в виде строк, поэтому вам нужно проанализировать их как целые числа, используя parseInt вот так:

 var analyseN1 = parseInt(document.getElementById("n1").value);
var analyseN2 = parseInt(document.getElementById("n2").value);
  

Другая проблема заключается в том, что для построения вашего уравнения вы на самом деле создаете строку кода для запуска. Можно выполнить выполнение строки кода eval() , но это ужасно небезопасно, поэтому никто здесь не будет рекомендовать это!

Возможно, вам придется вместо этого сделать что-то вроде:

 // Get the numbers from the selects, and the operator
var analyseN1 = parseInt(document.getElementById("n1").value);
var analyseOp = document.getElementById("op").value
var analyseN2 = parseInt(document.getElementById("n2").value);

// Add or subtract the numbers, depending on the selected operator
var addUp;
if(analyseOp == " "){
  addUp = analyseN1   analyseN2;
}else{
  addup = analyseN1 - analyseN2;
}
  

Вот почему вам следует избегать использования eval() , хотя это самый прямой ответ на ваш вопрос:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Don.27t_use_eval.21

Комментарии:

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

2. Взято на борт @Cerbrus и соответствующим образом обновил мой ответ. Приветствия!

Ответ №2:

Чтобы фактически выполнить вычисления, вам нужно немного больше кода, чем это.

То, что вы делаете прямо сейчас, — это получение значений из элементов n1 , op , и n2 . Затем вы в основном объединяете эти строки в результат.

Чтобы получить числовое значение строк n1 и n2 , вам нужно использовать parseInt :

 function perform() {
    var analyseN1 = parseInt(document.getElementById("n1").value, 10);
    var analyseOp = document.getElementById("op").value
    var analyseN2 = parseInt(document.getElementById("n2").value, 10);
  

Со страницы MDN:
parseInt() Функция анализирует строковый аргумент и возвращает целое число указанного основания или основания.

Затем, чтобы использовать правильный оператор, в зависимости от выпадающего списка, вам нужно будет сравнить analyseOp значение с a " " и "-" строкой:

     var addUp;
    if(analyseOp === ' '){
        addUp = analyseN1   analyseN2;
    }else if(analyseOp === '-'){
        addUp = analyseN1 - analyseN2;
    }

    document.getElementById("printE").innerHTML= addUp;
}