![]() |
|
||||||||||
|
|||||
|
Ранее не сталкивался со следующей проблемой:
Как вычислить выражение вида var_num="2+2"; те получить var_num=4 Функция eval как я уже понял не прокатывает.... Есть ли простой метод это сделать?
__________________
Бороться и искать, найти и перепрятать. |
|
|||||
|
Старым способом, который в школе на бейсике изучал.
а = 2 б = 2 в = а + б ![]()
__________________
Учиться и, когда придет время, прикладывать усвоенное к делу - разве это не прекрасно! Беседовать с другом, приехавшим издалека, - разве это не радостно! Не быть по достоинству оцененным светом и не таить обиду - разве это не возвышенно! |
|
|||||
|
Random SunFire, вся фишка в приведении типов данных и в ассоциативности операторов:
var_num = 2+2 = 4 - оператор сложения, так как оба операнда имеют тип number var_num = "2"+"2" = 22 - конкатенация, оба операнда имеют тип string var_num = "2+2" = 2+2 - ни то ни другое, символ "+" это часть строки Последний раз редактировалось Krisha; 04.07.2003 в 14:20. |
|
|||||
|
Все это конечно замечательно
, но видимо надо уточнить вопрос. Допустим вы вводите в текстовое поле выражение вида "2+2", и мы получаем переменную text равную "2+2". А вот теперь вопрос, как из этого получить 4. Вобще, какой функцией можно поменять тип переменой? Обыскался... Как определить тип есть, а сменить нет?
__________________
Бороться и искать, найти и перепрятать. |
|
|||||
|
Судя по всему найденму, нормальными методами получить 4 из "2+2" нельзя...
Так что, уточняю в догонку вопрос ставший основным.Как сделать из var_num="2" переменную со значением var_num=2 ?
__________________
Бороться и искать, найти и перепрятать. Последний раз редактировалось Random SunFire; 04.07.2003 в 14:54. |
|
|||||
|
var_num = Number(var_num);
А вообще, имхо, что-то ты перемудрил, если у тебя, чтобы сложить 2 числа нужно в одно и тоже поле вписАть 2+2, а не в 2 разных вписАть просто числа Последний раз редактировалось Krisha; 04.07.2003 в 15:02. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
если в строке только плюсы и минусы - можно сделать так:
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"));
|
|
|||||
|
Угу. А сменить тип на числовой судя из кода - Number(p[i][j]); Спасибо.
У меня кстати идея , собирать строчку для вычисления во Флаше и отправлять её вычислять на PHP, самый чуствую простой способ.
__________________
Бороться и искать, найти и перепрятать. |
![]() |
Часовой пояс GMT +4, время: 05:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|