Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Убрать нули в цене (опять, но не совсем)


Recommended Posts

Приветствую, форумчане!

Прошу помощи в решении специфичной задачи: Нужно убрать в отображении цены на сайте цифр после запятой (и саму запятую) в случае если эти цыфры = .00

Дело в том, что в магазине есть несколько товаров ценой с копейками. Соответственно в настройках цены стоит: округлять до 2-х знаков после запятой. Но подавляющее число товаров с ценой в рублях (без копеек). И получается что цены вида рр.00, что не очень эстетично и в ряде мест не помещается из-за длинны.

Как я понимаю, настройки округления цены нельзя разделить между категориями и товарами?

Надіслати
Поділитися на інших сайтах


ceil

ceil - округляет дроби в сторону увеличения.

Описание

float ceil (float value)

Возвращает следующее ближайшее целочисленное значение путём округления value, если это необходимо.
return-значение ceil() сохраняет тип float, так как диапазон значений float обычно больше, чем у integer.

Пример 1. ceil()
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
Надіслати
Поділитися на інших сайтах

55 минут назад, den4ikm сказал:

123.00 ‘нужно избавить от нулей’

Тогда $cost = preg_replace('/(\.){1}(\d)++/i','',$cost);

Это уберет все после точки, в отличие от str_replace('.00',''

Надіслати
Поділитися на інших сайтах

6 минут назад, esculapra сказал:

$cost = preg_replace('/(\.){1}(\d)++/i','',$cost);

Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) {

$cost = preg_replace('/(\.){1}(\d)++/i','',$cost);

}

как я понял, после точки могут идти 3 нуля

Надіслати
Поділитися на інших сайтах

Спасибо всем за варианты, буду пробовать

1 час назад, chukcha сказал:

str_replace('.00',''

Не понял это выражение (

22 минуты назад, esculapra сказал:

Но вначале нужно прописать условие if(preg_match('/(\.){1}(0){3}/i',$cost)) {

$cost = preg_replace('/(\.){1}(\d)++/i','',$cost);

}

как я понял, после точки могут идти 3 нуля

Нет, возможны только два знака после запятой (установлено в настройках)

Надіслати
Поділитися на інших сайтах


2 минуты назад, den4ikm сказал:

Не понял это выражение

То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost);

 

если только 2 нуля, тогда

if(preg_match('/(\.){1}(0){2}/i',$cost)) {

$cost = preg_replace('/(\.){1}(\d)++/i','',$cost);

}

Попробуй мой метод с массивом - там четко сработает.

Надіслати
Поділитися на інших сайтах

Только что, esculapra сказал:

Попробуй мой метод с массивом - там четко сработает.

Сам алгоритм таков:

- переменная переносится в массив с двумя значениями

- проверяется число после точки, и если это не нули, то ничего не делает, иначе в переменную заносится только целочисленное значение.

Надіслати
Поділитися на інших сайтах

1 час назад, esculapra сказал:

То есть в переменной заменяет точку и 2 нолик на пустое значение.$cost = str_replace('.00',''.$cost);

 Выберу это, регулярки я вообще не понимаю.

Благодарю за помощь

Надіслати
Поділитися на інших сайтах


  • 2 months later...

В связи с вопросами в личку выкладываю итоговое решение:

/system/library/cart/currency.php

public function format($number, $currency, $value = '', $format = true) {
        $symbol_left = $this->currencies[$currency]['symbol_left'];
        $symbol_right = $this->currencies[$currency]['symbol_right'];
        $decimal_place = $this->currencies[$currency]['decimal_place'];

        if (!$value) {
            $value = $this->currencies[$currency]['value'];
        }

        $amount = $value ? (float)$number * $value : (float)$number;
        
        $amount = round($amount, (int)$decimal_place);
        
        if (!$format) {
            return $amount;
        }

        $string = '';

        if ($symbol_left) {
            $string .= $symbol_left;
        }

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

        if ($symbol_right) {
            $string .= $symbol_right;
        }

        return $string;
    } 

Использовалось на версии OC 2.3.0.2.3

Еще раз спасибо , @AlexDW ,@esculapra,@chukcha

Змінено користувачем den4ikm
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.