Как окргулить цену? (вместо 157 руб например 150 или 160)

Тема в разделе "Shop-script", создана пользователем sounde, 19 ноя 2008.

Статус темы:
Закрыта.
  1. sounde

    sounde

    Регистр.:
    12 сен 2008
    Сообщения:
    391
    Симпатии:
    64
    Привет всем!
    Знаю, что похожая тема была, в ней попутно и копейки обрезали, но именно сделать округления так и не получилось :(
    Что нужно: самое главное, чтобы цена всегда заканчивалась на 0, т.е. пример: цена 157 руб, мне нужно чтобы была 150 или 160 руб, лучше конечно в сторону увеличения, но как получиться.
    Т.е округлить нужно до целых десятков.
    Как бы это реализовать?
    Я готов заплатить за решение.
     
  2. sclerotiq

    sclerotiq Создатель

    Регистр.:
    24 окт 2008
    Сообщения:
    15
    Симпатии:
    3
    а в чем исчисляете и скоко валют? навтирину вывести легко, а по заказу и базе чтоб шло труднее
     
  3. sounde

    sounde

    Регистр.:
    12 сен 2008
    Сообщения:
    391
    Симпатии:
    64
    Валюта только рубли,лучше чтобы в базу, так как при заказе же будет учитыватся и покупатель может возмутиться, что цена на витрине одна ,а при оформлении покупки стала выше.
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    может перед записью в базу дели сумму на 10. что было 157 / 10 = 15.7. Потом округляй до целого числа 16.0. Снова умножь на 10. Получишь 160. так и пиши

    $price = 10 * ceil($price / 10);

    ну в базу соответственно
    UPDATE tovar SET price = $price
     
    sounde нравится это.
  5. sclerotiq

    sclerotiq Создатель

    Регистр.:
    24 окт 2008
    Сообщения:
    15
    Симпатии:
    3
    в пхпмайадмин выполнить запрос -
    UPDATE `SS_products` SET `Price`=ROUND(`Price`,-1), `list_price`=ROUND(`list_price`,-1)

    154 станет 150, а 155 уже 160
    исправятся все нынешние цены. потом если не часто обновляетесь то повторять по мере надобности, а если часто то спрашивайте.
     
    sounde нравится это.
  6. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    собственно при составлении mysql тоже можно использовать ceil или ceiling. Они округляют в большую сторону.
     
  7. Welho®

    Welho® Предвестник пьянки

    Регистр.:
    4 дек 2007
    Сообщения:
    855
    Симпатии:
    330
    топикстартеру нужно чтобы при смене курса валюты менялась цена, соответственно округленная до ближайшего большего/меньшего
    если он так постоянно будет обновлять в совокупности с изменением курса, то потихоньку цена уплывет, цена округлиться, запишется в БД, потом изменится курс, цена опять округлится и снова пропишется в БД, и так пока цена не перестанет соответствовать действительной стоимости.
    теоретечески ему надо округлять цену не в самой БД, а непосредственно при выводе цены и подсчете заказа.
     
    sounde нравится это.
  8. Caurus

    Caurus

    Регистр.:
    21 фев 2008
    Сообщения:
    348
    Симпатии:
    285
    round (PHP 3, PHP 4)

    round - округляет число с плавающей точкой/float.

    Описание
    float round (float val [, int precision])

    Возвращает значение числа val, округлённое до специфицированной точности precision (количество цифр после десятичной точки). precision может быть также отрицательным или нулём (по умолчанию).

    Предупреждение!
    PHP по умолчанию не обрабатывает корректно строки вроде "12,300.2". См. конвертация из строк.


    echo round(3.4); // 3
    echo round(3.5); // 4
    echo round(3.6); // 4
    echo round(3.6, 0); // 4
    echo round(1.95583, 2); // 1.96
    echo round(1241757, -3); // 1242000



    Примечание: параметр precision доступен только в PHP 4.

    См. также ceil() и floor().

    От себя скажу головняк..однако..будет.. в том варианте в котором есть в SS цены
     
    sounde нравится это.
  9. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    это наверное не самый оптимальный вариант. проще прогнать цены в БД раз и навсегда. Чтоб они гарантированно не "уплывали" добавьте условие
    WHERE MOD(price, 10) > 0
    P.S. если память не изменяет то так. Суть в том чтоб изменять цены там где остаток от деления цены на 10 не равен нулю. для случая округления до десятков.
     
  10. sounde

    sounde

    Регистр.:
    12 сен 2008
    Сообщения:
    391
    Симпатии:
    64
    Спасибо всем за советы!
    Если честно, то сам врядли сумею вставить эти фрагменты, которые вы все написали правильно в скрипт магазина :(
    PHP язык знаю процентов так на 20.
    Незнаю отказаться от идеи округления или нет..
    В основном просто хотел с окргулением заморочится только из-за того, что напрмер вот смотрите покупатель выбрал три товара со стоимостью: 170, 120 и 340 руб, ему легче прикинуть итоговоую сумму сразу же в уме будет, да и смортится акуратнее, чем например: 171, 123, 344.
     
Статус темы:
Закрыта.