Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Арифметические вычисления в строке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dubasua
Отправлено: 27 Февраля, 2015 - 10:33:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Доброго времени суток.
Есть строка
PHP:
скопировать код в буфер обмена
  1. $markup = '5148 / 100 * 5 + 5148 *25';

Как в этой строке сделать все необходимые вычисления и получить результат. Строки могут содержать и другие математические выражения. Спасибо.
(Добавление)
Пока решил вот так.
PHP:
скопировать код в буфер обмена
  1. $markup = "(100+(100/100*5))";
  2. $result = "\$res = {$markup};";
  3. eval($result);
  4. echo $res; // 105

Может еще варианты будут?

(Отредактировано автором: 27 Февраля, 2015 - 10:49:09)

 
 Top
Мелкий Супермодератор
Отправлено: 27 Февраля, 2015 - 11:02:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если не волнует безопасность - eval.
Если интересует нормальный вариант - то гуглите написание анализатора математических выражений, обратная польская запись и куда-то в ту степь.


-----
PostgreSQL DBA
 
 Top
dubasua
Отправлено: 27 Февраля, 2015 - 11:19:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Мелкий пишет:
Если не волнует безопасность - eval.
Если интересует нормальный вариант - то гуглите написание анализатора математических выражений, обратная польская запись и куда-то в ту степь.


Спасибо за направление. По ищу...
(Добавление)
Как по мне, то самый простой и быстрый способ, это запрос к MySql
PHP:
скопировать код в буфер обмена
  1. $str = "(154+(154/100))*31";
  2. $sql = "SELECT {$str} AS result";
 
 Top
Мелкий Супермодератор
Отправлено: 27 Февраля, 2015 - 11:37:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




SQL-injection by design.
В теории это лучше, чем eval, т.к. eval'ом можно эту инъекции тоже осуществить, но всё равно ужасно.
Просто, быстро и безопасно - пинать консольный калькулятор через escapeshellarg. Минус в переносимости.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB