#1 2011-08-22 10:17

Йошкин Кот
Пользователь

Исправить неправильное округление

Я писал об этой ситуации в техподдержку. Поблагодарили за найденную ошибку в программном коде. Но, похоже, так и не собираются исправлять.

У нас есть способы доставки, рассчитываемые по способу «Фиксированная стоимость доставки + процент».
ПРИМЕР:
Расчет: 300 руб. + 5%
Стоимость заказа 490 руб.
Стоимость доставки: 300 + 490*5% = 324,50

Интересно, что заказ обсчитывается с разным округлением:
1.    Во время оформления заказа клиенту показывается стоимость доставки без копеек (325 рублей из примера)
2.    Письмо о заказе клиенту приходит с копейками (324,50 рублей)
3.    В административной панели в карточке заказа сумма доставки идет с копейками (324,50)
4.    Письмо администратору магазина приходит так же с копейками (324,50)
5.    В админке (см. скриншот) так же считается по-разному.

Пример:
http://img-fotki.yandex.ru/get/5809/16151350.b/0_5f962_ce71cfa6_XXL.jpg

Неактивен

 

#2 2011-09-05 12:40

013
Пользователь

Re: Исправить неправильное округление

Неприятная ерунда...

Неактивен

 

#3 2012-07-21 06:21

Merc
Пользователь

Re: Исправить неправильное округление

Такая же проблема была, только со скидками. При подсчете скидки в заказе вылезало что-то вроде 4505.47 руб, приходилось постоянно править. Хотя цены в магазине целые, формула подсчета скидки высчитывала десятичные. Решил проблему следующим образом, на самом деле оказалось достаточно просто, путем округления конечной суммы средствами PHP.

В данном случае мне необходимо было изменить формулу подсчета скидки, ищем фаил discount_functions.php в папке core_functions
В нужной группе скидок вставляем следующий код:

Код:

$discount_order_price1 = ($cart_subtotal * $discount_percent / 100);

$discount_order_price2 = round($discount_order_price1,-1); // -1 отвечает за число округления, чем выше число тем больше в идет дробную часть и меньше округление

return ($discount_order_price2);

У меня это выглядит вот так:

Код:

function _getDiscountByCustomerGroup($cart_subtotal, $log)
{
    
    if(!is_bool($customerID=regGetIdByLogin($log)))
    {
        $customer_group = GetCustomerGroupByCustomerId( $customerID );
        $discount_percent = ($customer_group !==false ? $customer_group["custgroup_discount"] : 0);
    };
$discount_order_price1 = ($cart_subtotal * $discount_percent / 100);

$discount_order_price2 = round($discount_order_price1,-1);

return ($discount_order_price2);
}

Не стал заморачиваться поисками для "всемирного" округления всего на сайте, в данном случае нужно было округлить 10 целые числа, чтобы это выглядело вместо 8567,56 руб.  вот так ==> 8570.00 руб. при расчете скидки "групп покупателей" во время оформления заказа.

Отредактировано Merc (2012-07-21 06:23)

Неактивен

 

#4 2012-10-14 13:42

Kmit
Пользователь

Re: Исправить неправильное округление

Я приобрел скрипт в августе 2012,  в первом-же тестовом заказе посчитало сумму с лишними копейками, это без скидок и с одной установленной валютой, код не менял.
Разработчики тоже поблагодарили и пообещали, а как мне быть ?[img]zakaz1[/img]

Отредактировано Kmit (2012-10-14 13:44)

Неактивен

 

Board footer

Powered by PunBB