Как сделать расчет с использованием переменной - PullRequest
1 голос
/ 01 февраля 2020

Я хочу сделать генератор случайных вычислений, который даст ответ. Моя проблема в том, что я не могу сделать расчет.

operating = Math.floor(Math.random() * 2) + 1;
if (operating == 1) {operating = "+";} else {operating = "-";};
nb1 = Math.floor(Math.random() * max);
nb2 = Math.floor(Math.random() * max);
document.getElementById("calculs").innerHTML = nb1 + " " + operating + " " + nb2;
answer = nb1 + operating + nb2;
console.log(answer);

Эта строка: answer = nb1 + operating + nb2; Не работает document.getElementById ("calculs"). inner HTML = nb1 + "" + operating + "" + nb2; результат (пример): 10 + 10

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

См. eval() функция для "запуска" кода из строки, которая может быть математической операцией. Однако также обратите внимание на опасности на той же странице

Так что попробуйте:

console.log(eval(answer));

Вместо этого вместо этого вставьте вычисление в if:

operating = Math.floor(Math.random() * 2) + 1;
nb1 = Math.floor(Math.random() * max);
nb2 = Math.floor(Math.random() * max);
if (operating == 1) {
  operating = "+";
  answer = nb1 + nb2;
} else {
  operating = "-";
  answer = nb1 - nb2;
};
document.getElementById("calculs").innerHTML = nb1 + " " + operating + " " + nb2;
console.log(answer);
1 голос
/ 01 февраля 2020

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

answer = nb1 + operating + nb2;
result = eval(answer);
0 голосов
/ 01 февраля 2020

Предполагая, что вы в основном хотите, чтобы результат был 20 (число), а не "10 + 10" (строка):

const result = operating === 1 ? nb1 + nb2 : nb1 - nb2;

Получит вам результат.

Кроме того, если Вы хотите представить строку «10 + 10», не используйте ту же самую переменную operating, потому что код будет менее читаемым. Так что в этом случае вы можете сделать:

let operatorSymbol;
let result = 0;
const nb1 = Math.floor(Math.random() * max);
const nb2 = Math.floor(Math.random() * max);
const operating = Math.floor(Math.random() * 2) + 1;
if (operating === 1) {
  operatorSymbol = '+';
  result = nb1 + nb2;
} else {
  operatorSymbol = '-';
  result = nb1 - nb2;
}
document.getElementById("calculs").innerHTML = `${nb1} ${operatorSymbol} ${nb2}`;
console.log(result);
...