Показать сообщение отдельно
  #10 (permalink)  
Старый 12.06.2016, 20:37
Интересующийся
Отправить личное сообщение для antonizbraniy Посмотреть профиль Найти все сообщения от antonizbraniy
 
Регистрация: 12.05.2015
Сообщений: 16

Сообщение от pureJS Посмотреть сообщение
antonizbraniy, мне сложно сказать, но судя по поставленной тобой задаче, только так. Ещё можно, к примеру, не всё выражение из строки брать как у тебя в задаче, а к примеру, число возводимое в степень брать из "input type=text" (1), а его степень из "input type=text" (2) и их проставлять в моё выражение:
eval('Math.pow(' + base+ ', ' + exponent + ')');

где base - это число из "input type=text" (1)
а exponent - это число из "input type=text" (2)

Можно это всё и без eval записать вот так:
var base = document.getElementById('input_1');
var  exponent = document.getElementById('input_2');
var число_в_степени = Math.pow(parseInt(base), parseInt(exponent));

Возможно, что ты это всё так и хотел, но в описании задачи у тебя написано по-другому - обязательно через eval + выражение одной строкой.
Я вот нашел вот такую функцию:

function convertToMath(string){
var str = string;
str = str.replace(/(sin|cos|tan|asin|acos|atan|pow|abs|exp|sqrt)\(/g, "Math.$&");
str = str.replace(/(ln)\(/g, "Math.log(");
str = str.replace(/(cotan)\(/g, "1/Math.tan(");
str = str.replace(/(acotan)\(/g, "Math.PI/2-Math.atan(");
str = str.replace(/(log)\(/g, "repl.$&");
str = str.replace(/(dtor)\(/g, "degToRad(");
logCount = (str.match(/repl\.log\(/g) || []).length;
for (var i = 1; i <= logCount; i++) {
console.log('str - do ' + str);
str = findLogArgs(str);
console.log('str - posle ' + str);
};
return str;
}

Как я понимаю, если она находит такие вещи в строке как pow, sin и т.д. Она заменяет на Math.pow и т.д. Ведь это мне и нужно?
Я попытался изменить строку вывода: $('#otvetka').val(eval(convertToMath(textos))); Нечего не происходит (
Ответить с цитированием