За последние 24 часа нас посетили 35384 программиста и 1814 роботов. Сейчас ищут 948 программистов ...

Математические вычисления

Тема в разделе "PHP для новичков", создана пользователем Yankovitz, 8 сен 2017.

  1. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Добрый день.
    Есть строка с парами вида 1000:2, 5000:3 (числа заведомо неизвестны, количество пар заведомо тоже неизвестно)
    Как на php производить математические вычисления, если брать данные из строки? Например, задать условие:
    Если переменная $summa равна или больше 1000, то уменьшить её на 2%, если переменная равна или больше 5000, то уменьшить на 3%.
    Спасибо
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    разбить строку на массив пар
    сделать вычисления в цикле
    PHP:
    1. $summa = 4500;
    2. $arr = explode(",",$str);
    3. foreach ($arr AS $a) {
    4.   $m = explode(":",$a);
    5.   $out = ($summa>=$m[0]) ? ($summa/100)*$m[1] : $summa;
    6. }
    7. echo $out;
     
    TeslaFeo и Yankovitz нравится это.
  3. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Здорово. Попробовал, работает. Но как только вписываю вторую пару, первая дает сбой.
    --- Добавлено ---
    Я так понимаю, вся загвоздка в условиях...
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    все зависит от ваших пар и числа
    то есть если 1000:2, 5000:3 и число 5500.... то сначала сработает первая пара, так как подходит под условия
    потом сработает вторая пара - так как тоже подходит - в итоге всегда будет последняя пара которая подходит условию

    в вашей постановке задачи ничего и не указано как в таких случаях считать
    может вам массив надо ... чтоб для каждой пары вычислялось, а может еще чего
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    вся загвоздка в том, что нужно тыкнуть мышкой по слову explode в коде выше и почитать, что он делает.
    Затем, если необходимо, почитать про foreach (гугл умеет быстро искать такие слова).
    Это поможет осознать саму суть реализации.
    После всего можно сделать всё самому.
    И последним пунктом получить мощный впрыск гормонов радости в камеру сгорания головного мозга.
     
  6. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Все верно, пары должны работать последовательно. Тестирую... То есть, если число между 1000 и 5000, $out становится равной $summa.
    --- Добавлено ---
    Прошу прощения... немного затормозил, увидел ошибку
     
  7. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Опять зависаю. Как учесть ситуацию, когда $summa между 1000 и 5000?
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Кому учесть то?
    Вы для себя ясно решите что вы хотите получить в итоге и по каким правилам
     
  9. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Если переменная от 1000 до 4999, то уменьшаем на 2%
    если переменная равна 5000 и больше, то на 3%
    если менее 1000, то не уменьшаем.
    Предложенный код тестирую, но если сумма от 1000 до 4999, то не уменьшается на 2%
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Замените строчку
     
  11. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Нет, не работает...
     
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Что именно? Работает по первому алгоритму...
    Вторая пара так же подходит. Я ж говорил будет работать последняя.
    Четко сформулируйте что именно вы хотите в общем случае...
     
  13. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Я правильно понял, что ваш вариант для случая:
    Если переменная от 1000 до 4999, то уменьшаем на 2%
    если переменная равна 5000 и больше, то на 3%
    если менее 1000, то не уменьшаем.
    ????
    --- Добавлено ---
    И не понял, что заменить на
    Код (Text):
    1.  If ($summa>=$m[0]) $out =($summa/100)*$m[1]:
     
  14. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Надоело жевать. Думайтесами
     
    TeslaFeo нравится это.
  15. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Если идет речь замены
    Код (Text):
    1. $out = ($summa>=$m[0]) ? ($summa/100)*$m[1] : $summa;
    на
    Код (Text):
    1. If ($summa>=$m[0]) $out =($summa/100)*$m[1]:
    , то выдает синтаксическую ошибку unexpected ':'
     
  16. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Печаль