PDA

Просмотр полной версии : Удивил, и очень удивил!


Random SunFire
04.07.2003, 13:57
Ранее не сталкивался со следующей проблемой:
Как вычислить выражение вида var_num="2+2"; те получить var_num=4
Функция eval как я уже понял не прокатывает.... Есть ли простой метод это сделать?

Dimonius
04.07.2003, 14:01
Старым способом, который в школе на бейсике изучал.

а = 2
б = 2
в = а + б

:D

Krisha
04.07.2003, 14:17
Random SunFire, вся фишка в приведении типов данных и в ассоциативности операторов:

var_num = 2+2 = 4 - оператор сложения, так как оба операнда имеют тип number

var_num = "2"+"2" = 22 - конкатенация, оба операнда имеют тип string

var_num = "2+2" = 2+2 - ни то ни другое, символ "+" это часть строки

Random SunFire
04.07.2003, 14:30
Все это конечно замечательно :p , но видимо надо уточнить вопрос.
Допустим вы вводите в текстовое поле выражение вида "2+2", и мы получаем переменную text равную "2+2". А вот теперь вопрос, как из этого получить 4.
Вобще, какой функцией можно поменять тип переменой?
Обыскался... Как определить тип есть, а сменить нет?

Random SunFire
04.07.2003, 14:51
Судя по всему найденму, нормальными методами получить 4 из "2+2" нельзя...
Так что, уточняю в догонку :D вопрос ставший основным.
Как сделать из var_num="2" переменную со значением var_num=2 ?

Krisha
04.07.2003, 14:56
var_num = Number(var_num);

А вообще, имхо, что-то ты перемудрил, если у тебя, чтобы сложить 2 числа нужно в одно и тоже поле вписАть 2+2, а не в 2 разных вписАть просто числа

Nox Noctis
04.07.2003, 16:08
если в строке только плюсы и минусы - можно сделать так:
evaluate = function (str) {
var result = 0;
var p = str.split("+");
for (var i = 0; i<p.length; i++) {
if (typeof (p[i]=p[i].split("-")) != "object") {
result += Number(p[i]);
} else {
result += (p[i][0] != "") ? Number(p[i][0]) : 0;
p[i].splice(0, 1);
for (var j = 0; j<p[i].length; j++) {
result -= Number(p[i][j]);
}
}
}
return result;
};
//
trace(evaluate("2+2"));
trace(evaluate("2+2-2+2"));
trace(evaluate("10+2+2-3-5"));
trace(evaluate("-5+1+2-5+3+4-5"));
...если есть деление и умножение, да еще скобки не дай бог, тогда придется много морочиться :) можно канеш взять модуль regEXP, но нафига оно надо-то ? :)

Random SunFire
04.07.2003, 16:53
Угу. А сменить тип на числовой судя из кода - Number(p[i][j]); Спасибо.
У меня кстати идея :D , собирать строчку для вычисления во Флаше и отправлять её вычислять на PHP, самый чуствую простой способ.