Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Удивил, и очень удивил! (http://www.flasher.ru/forum/showthread.php?t=46447)

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, самый чуствую простой способ.


Часовой пояс GMT +4, время: 16:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.