Перейти к содержанию

Рекомендуемые сообщения

Всем привет!
Ребя подскажите пожалуйста криворукому человеку :(
Нужно округлить цены с 2 612 096 до 2 612 000.
Помогите пожалуйста разобраться как это можно сделать.
Очень жду дельный ответ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


<?php

round(число, -3)

?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Округление цены до сотен
 
 
system/library/currency.php
строку      
  $string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
заменить на     
  $string .= number_format(round($value, -2), (int)$decimal_place, $decimal_point, $thousand_point);
 
условие проверки валюты, например (RUB)
(если есть необходимость в округлении определенной валюты, при наличии отображения нескольких валют на сайте)
 if ($currency == 'RUB')
{
$string .= number_format(round($value, -2), (int)$decimal_place, $decimal_point, $thousand_point);
}
else
{
$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

по аналогии до тысячи (-2 меняем на -3)

 

судя по цифре у Вас белорусский рубль, значит для вас 

 if ($currency == 'BYR')
{
$string .= number_format(round($value, -3), (int)$decimal_place, $decimal_point, $thousand_point);
}
else
{
$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

по аналогии до тысячи (-2 меняем на -3)

 

судя по цифре у Вас белорусский рубль, значит для вас 

 if ($currency == 'BYR')
{
$string .= number_format(round($value, -3), (int)$decimal_place, $decimal_point, $thousand_point);
}
else
{
$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

 

Огромное спасибо!

Вы настоящий друг :eek:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да лан, не парься))) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо за решения, но у меня немного "посложнее" задача для рублевых округлений...

 

Есть товары дорогие, условно дороже 15 тыс, для них оеругление до сотен самое то,

но есть товары дешевые, всякая мелочевка, которая стоит условно от 300 до 3000 руб.,

и для них надо округлять уже десятки.

 

Т.е. нужна проверка, если цена условно до 3 тыр, то десятки , если больше, то сотни.

Что-то не получается у меня написать эту строку, может кто подскажет..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а какие попытки предпринимались?

 if ($currency == 'BYR')
{
$string .= ($value>15000)? number_format(round($value, -3), (int)$decimal_place, $decimal_point, $thousand_point) : number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое.

 

Но ошибка происходит, не могу понять где:

if ($currency == 'RUB')
{
$string .= ($value>15000)? number_format (round($value, -2), (int)$decimal_place, $decimal_point, $thousand_point); 

else

$string .= number_format (round($value, -1), (int)$decimal_place, $decimal_point, $thousand_point); 
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы внимательно посмотрели мой пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал, как советовали выше, цена в карточке товара округляется. Но если положить его в корзину в количестве, отличном от 1, то для расчета суммы используется цена, причем с копейками. Например, товар стоит 1,73 USD. По курсу 64 получается 110,72

 

Если положить в товар 10 шт - то сумма получается 1107 без округления и 1110 с округлением. Если 100 или 1000 - то соответственно 11070 /11072 и 110720/110720 (при цене за шт. 110, т.к. в настройках указано не учитывать копейки).

 

Где подправить, чтобы при подсчете суммы тоже учитывалась округленная цена?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как выяснилось, это особенность подсчета самого движка opencart. Ошибки возникают, если валюта по дефолту и валюта во фронтенде отличаются.

Странно, что до сих пор нету мода, который исправляет эти ошибки и считает суммы используя цену фронтенда, а не дефолтную в другой валюте с последующим округлением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно ли округлить цену до кратной не 10, а 5 или 3? Можно вот так, например (кратно 5)

$string .= number_format(round($value/5, 0)*5,(int)$decimal_place, $decimal_point, $thousand_point);

Но проблема с вычислением сумм остается, т.к. эта строчка только для отображения цены...

Изменено пользователем Leo2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, ошибки накапливаются..

 

Для этого нужно округлять во сех тех местах, где происходят манипуляции с "денежными" числами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется сразу в бд писать округляя проще будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет..

 

Цена в админке указана в $

 

В магазине идет пересчет по курсу

 

Соответственно будут и копейки и десятки копеек.

 

Я уже на форуме показывал методы округления  финансовых данных, но их найти...

 

Проще повториться

 

$price = 1

$value = 1234.567;

 

$price_currency = round($price * $value);

 

Далее все манипуляции с уже округленными данными

 

$total = $price_currency * $quantity

 

И затем форматирование для вывода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

             Всем добрый день! Нужен совет как округлить цену в карточке товара? 

Задача была такая: нужно чтобы цена товара на ветрине и везде была без копеек и в виде округленного числа до десятков (Например 1230 руб а не 1231руб)

              С помощью способов опубликованных на форуме проделала следующее:

              - Сначала убрала копейки   Настройки--Локолизация--Валюта---знаков после запятой:   ставим 0.        Получила 1231 руб. 

              - Далее округлила цену до десятков:       в файле        \system\library\cart\currency.php

                найдем там функцию:                       public function format

                 в этой функции есть строка:     $amount round($amount, (int)$decimal_place);

                 заменим  на:                              $amount = (round($amount/10))*10;

Все теперь цена отображается корректно на ветрине и  считает в корзине  правильно согласно цены на витрине (даже если увеличить кол-во) 

И  выглядит как округленная до десятков:             например 1230руб.

                                                                                    в корзине 1230руб. * 2шт. =2460ру.

Но вот проблема, если зайти в карточку товара цена отображается все так же (не округленная)  например 1231руб.  Никак не найду ответ в каком файле что нужно исправить еще? Очень нужен совет!!!! Магазин установлен на движке Опенкарт Русская сборка  2.3.0.2.3. 

               

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не изобретайте велосипед с квадратными колёсами))

Пользуюсь решением. Есть и округление, работает по крону

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RusHookah  

спасибо, модуль интересный и наверное незаменим когда несколько валют применяется. У меня все проще есть только одна - это РУБ.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, Iren18 сказал:

RusHookah  

спасибо, модуль интересный и наверное незаменим когда несколько валют применяется. У меня все проще есть только одна - это РУБ.

 

Самый простой способ в вашем случае тек же этот файл копать

Данное решение на 1.5.* но по аналогии можно сделать и для 2.3 и 3.0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, RusHookah сказал:

Самый простой способ в вашем случае, Этот же файл копать

Данное решение на 1.5.* но по аналогии можно сделать и для 2.3 и 3.0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/system/library/cart/currency.php

        $string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point'));
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От maksiLo
      Скажите пожалуйста как сделать так чтобы все цены по умолчанию на сайте округлялись до 10-в рублей?
       
      Не нашёл плагин в котором можно было бы округлять цены на все товары или категории...
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.