Jump to content
den4ikm

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

руками допиливтаь
round();

Share this post


Link to post
Share on other sites

Спасибо за ответ

а про напильник подробнее, хотя бы навскидку?

Share this post


Link to post
Share on other sites

Саму функцию чтобы убрать думаю такую использовать:

rtrim($text, ".00");

либо регулярку

а вот где это искать - вопрос

 

Share this post


Link to post
Share on other sites

ceil

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

Описание

float ceil (float value)

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

Пример 1. ceil()
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10

Share this post


Link to post
Share on other sites

Похоже вы не так поняли, округление не нужно:

Есть 2 вида цен:

123.45 ‘нужно оставить как есть’

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

Share this post


Link to post
Share on other sites
28 минут назад, den4ikm сказал:

rtrim($text, ".00");

Это ппц

Читайте документацию

Share this post


Link to post
Share on other sites

 

Share this post


Link to post
Share on other sites

str_replace('.00',''

Share this post


Link to post
Share on other sites
55 минут назад, den4ikm сказал:

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

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

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

Share this post


Link to post
Share on other sites
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 нуля

Share this post


Link to post
Share on other sites

А можно еще так

if(strpos($cost,'.00')>0){

$cost = substr($cost,0,strpos($cost,'.')-1);

}

Edited by esculapra

Share this post


Link to post
Share on other sites

Есть еще один коварный метод

$a = explode('.',$cost):

if($a[1]=='000')

$cost = $a[0];

Share this post


Link to post
Share on other sites

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

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

str_replace('.00',''

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

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

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

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

}

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, den4ikm сказал:

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

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

 

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

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

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

}

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

Share this post


Link to post
Share on other sites
Только что, esculapra сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
1 час назад, esculapra сказал:

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.