не получается написать функцию с математическими операциями которые передаются строкой
дана функция в которую в качестве переменной передаются цифры и знака:
function str2num('1+3'){}
цифры, которые могут передаваться от 1 до 10 включительно. математические знаки, могут быть +,-,*,/. Результат должен быть округлен до ближайшего целого числа. Если вставить вместо цифры, букву, должна выводится ошибка throw Error.
вот мое решение:
function StrToNum(str){
let arr = str.split('');
let s;
for(let i = 0; i < 1; i++){
if (arr.includes('+')){
s = +str[0] + +str[2]
} else if(arr.includes('-')){
s = str[0] - str[2]
} else if(arr.includes('*')){
s = str[0] * str[2];
} else if(arr.includes('/')) {
s = str[0] / str[2];
} else {
throw Error('вы ввели неверный символ');
}
}
return Math.round(s);
}
понимаю, что решено неправильно, но никак не могу додуматься до двух вещей: 1)как исправить функцию, чтобы можно было сложить, например 3+10, или 5 * 10, так как мое решение позволяет проводить операции только с цифрами от 1 до 9 2) как сделать, чтобы при вставке символа, вместо цифры выводило ошибку throw Error.
Ответы (3 шт):
const str = '150/3';
const str2num = str => {
let string = '';
let operator = '';
for (const symbol of str) {
if (symbol === '+' || symbol === '-' || symbol === '*' || symbol === '/') {
string += ' ';
operator = symbol;
} else {
string += Number(symbol);
}
}
const arr = string.split(' ');
if (arr.includes('NaN')) {
return 'Вы ввели неверный символ';
}
const [a, b] = arr;
let result = 0;
switch (operator) {
case '+':
result = Number(a) + Number(b);
break;
case '-':
result = Number(a) - Number(b);
break;
case '*':
result = Number(a) * Number(b);
break;
case '/':
result = Number(a) / Number(b);
break;
}
return Math.round(result);
}
console.log(str2num(str));
Всем привет, понимаю что использовать eval нежелательно, но все же как решение задачи -
function str2num(args) {
let sum = 0;
try {
sum = alert(eval(args));
} catch(err) {
return alert("Ввели не число");
}
}
str2num('1+3');
Решение с использованием регулярных выражений:
console.log(str2num('10/3'));
function str2num(str) {
let match = str.match(/^\s*(\d+)\s*([+\-*/])\s*(\d+)\s*$/);
if (match !== null) {
let res = parseInt(match[1]);
let val = parseInt(match[3]);
let sign = match[2];
switch (sign) {
case '+': res += val; break;
case '-': res -= val; break;
case '/': res /= val; break;
case '*': res *= val; break;
}
return Math.round(res);
} else
throw Error('Вы ввели неверный символ!');
}