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

Неправильно считает проценты

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

Здравствуйте!

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

 

Товар стоит 6руб. 50коп. Ставим ему скидку 1% и получаем цену 6руб. 44коп. Расчет цены правильный. Но стикер на картинке нам показывает 0%!

 

Товар стоит 6руб. 00коп. Ставим ему скидку 1% и получаем цену 5руб. 94коп. Расчет цены тоже правильный. Но стикер на картинке нам показывает 17%!

 

Т.е. код, который определяет что писать на стикере (в product.tpl) не учитывает значение копеек, а учитывает только значение рублей: если оно не изменилось - то 0%

 

Вот этот код:

<!-- стикер-кружок -->
<?php if ($special) { ?><div style="position: absolute; z-index: 100; width: 60px; height: 60px; font-size: 25px; line-height: 60px; 
            background-color: #F1AC18; border-radius: 50px; color: #fff;" >-<?php echo round((($price) - ($special)) / (($price) / 100)); ?>%</div><?php } ?>

Подскажите, как заставить его видеть еще и копейки (т.е. дробную часть в цене товара)?

Спасибо.

 

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


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

Тут вообще бред написан

 

$price =  6руб. 50коп.

$special = 5руб. 94коп

 

Но что будет в результате вычисления  6руб. 50коп.  -  5руб. 94коп НЕИЗВЕСТНО

 

Поэтому save нужно вычислять в контроллере, на голых числах

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


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

А формат цены у тебя какой по умолчанию задан?

В целом согласен с вышесказанным - правильнее вычислять в контроллере

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


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

 

Но что будет в результате вычисления  6руб. 50коп.  -  5руб. 94коп НЕИЗВЕСТНО

 

 

 

 

Там там же не просто 6.50-5.94!

Там полный расчет такой   (старая цена-новая цена) / (старая цена:100%)               - так и высчитывается процент от двух чисел. Ну и еще этот round округляет до целых чисел величину скидки (что-бы не 16,67% было, а 17%)

Так что расчет правильный.  Просто он использует для своих вычислений только целые числа цены (только рубли).

 

А формат цены у тебя какой по умолчанию задан?

 

 

Формат у меня задан "белорусские рубли" (BYN) и количество знаков после запятой - 2. Т.е. копейки заданы.

 

Как-то исправляли файл currently.php. Так вот туда вставили (или исправили) такой вот кусок кода:

 if ($format && $currency == 'BYN') {
            $value = round($value, (int)$decimal_place);
            $sign = ($value < 0 ? '-' : '');
            $value = abs($value);
            $rub = floor($value);
            $cop = round(($value - $rub) * 100);
            $string = sprintf('%s%uр.%02uк.', $sign, $rub, $cop);
        }
Изменено пользователем Lilya

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


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

Там там же не просто 6.50-5.94! Там полный расчет такой   (старая цена-новая цена) / (старая цена:100%)               - так и высчитывается процент от двух чисел. Ну и еще этот round округляет до целых чисел величину скидки (что-бы не 16,67% было, а 17%)

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


Как-то исправляли файл currently.php. Так вот туда вставили (или исправили) такой вот кусок кода:

Этот костыль городили для деноминации? Интересное решение если для нее.

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


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

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

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

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

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

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

Войти

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

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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