Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Округлить в меньшую сторону

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
jess23
Отправлено: 23 Сентября, 2015 - 17:24:36
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Доброго времени!

Помогите разобраться с такой штукой, мне нужно отобразить нормальные конечные значения.

У меня есть функция:
PHP:
скопировать код в буфер обмена
  1. 'saving'      => $result['price'] == 0 ? 100 : round((($result['price'] - $result['special'])/$result['price'])*100, 0, )


Числа которые она содержит: (27-20/27)*100 = 25,9259...
PHP все это обрабатывает таким образом что на выходе я получаю 26.

Можно ли сделать чтобы на выходе я получал не 26 а 25 без чисел после запятой?

Стараюсь разобраться с PHP_ROUND_HALF_DOWN - но ничего не получается в таком виде:

PHP:
скопировать код в буфер обмена
  1. 'saving'      => $result['price'] == 0 ? 100 : round((($result['price'] - $result['special'])/$result['price'])*100, PHP_ROUND_HALF_ODD)


На выходе отображается очень много цифр.

Вопрос, возможно ли отобразить число 25 без задних чисел?

Спасибо за помощь, буду благодарен если немного объясните как это сделать.
 
 Top
Panoptik
Отправлено: 23 Сентября, 2015 - 17:28:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




OMG
floor


-----
Just do it
 
 Top
jess23
Отправлено: 23 Сентября, 2015 - 17:32:40
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Panoptik пишет:
OMG
floor


Благодарочка.
 
 Top
jess23
Отправлено: 25 Сентября, 2015 - 09:53:54
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




В некоторых моментах не выходит получить точный процент.

Помогите разобраться:

Я не могу получить точный процент на некоторых цифрах. Подскажите как правильно написать вот такой момент:

PHP:
скопировать код в буфер обмена
  1. floor((($result['price'] - $result['special'])/$result['price'])*100)


Другими словами отнимаю 15%, пример: ((49-41.65)/49)*100=15% - все верно.
Но каким образом сделать так, чтобы когда я считаю: ((49-42)/49)*100=14% - это отображалось как 15%.

Как правильно округлять, чтобы получать правильный процент?

Я перепробовал разные подходы: round(), ceil(), floor(); а так же разные параметры для round... Не могу сообразить, помогите разобраться.

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

(Отредактировано автором: 25 Сентября, 2015 - 10:25:03)

 
 Top
Marattt
Отправлено: 25 Сентября, 2015 - 10:10:40
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




ты сначало посчитай ((49-42)/49)*100!= >14.5%
 
 Top
Sail
Отправлено: 25 Сентября, 2015 - 10:20:23
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




jess23
1. Расставьте правильно скобки в приведённых Вами примерах.
2. Напишите нормальную формулу получения требуемого результата. Например, подобную такой:
Прикреплено изображение
sgnx.png
 
 Top
jess23
Отправлено: 25 Сентября, 2015 - 10:21:46
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Marattt пишет:
ты сначало посчитай ((49-42)/49)*100!= >14.5%


Я спрашиваю за то каким образом можно округлять такие значения?

Если я получаю даже меньше 14,5% как мне подогнать это к 15%...

Считать ещё умею.
(Добавление)
Sail пишет:
jess23
1. Расставьте правильно скобки в приведённых Вами примерах.
2. Напишите нормальную формулу получения требуемого результата. Например, подобную такой:


Да действительно мой косяк, пример исправил.

(Отредактировано автором: 25 Сентября, 2015 - 10:23:52)

 
 Top
Marattt
Отправлено: 25 Сентября, 2015 - 10:29:42
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




какие такие
 
 Top
SAD
Отправлено: 25 Сентября, 2015 - 10:35:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




может, для начала, распишете общую логику?

потому что частный случай нам ничего не говорит. но, если брать Ваш частный случай, то
должен помочь

(Отредактировано автором: 25 Сентября, 2015 - 10:37:04)

 
 Top
jess23
Отправлено: 25 Сентября, 2015 - 10:36:11
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Marattt пишет:
какие такие


((49-42)/49)*100!= >14.5%

Округлить в мое случаи: >14.5% к 15% независимо от того меньше оно 14,5% или больше 14,5%.
 
 Top
Marattt
Отправлено: 25 Сентября, 2015 - 10:37:02
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




 
 Top
Sail
Отправлено: 25 Сентября, 2015 - 10:37:49
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




jess23 пишет:
Я спрашиваю за то каким образом можно округлять такие значения?

Если я получаю даже меньше 14,5% как мне подогнать это к 15%...

Есть округление в меньшую сторону, есть округление в большую сторону, есть округление в сторону ближайшего чётного, есть округление в сторону ближайшего нечётного...
Выбирайте любое, или их комбинацию для получения требуемого по условиям ТЗ числа определённой точности (целого, или z знаков после десятичной запятой)...
Ведь не 15-ю процентами лишь...
А если и 15-ю, то - до ближайшего нечётного Улыбка
И то - если уверены, что рассчитанная величина будет лежать в интервале (14-16)

(Отредактировано автором: 25 Сентября, 2015 - 10:39:11)

 
 Top
jess23
Отправлено: 25 Сентября, 2015 - 10:42:56
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




SAD пишет:
может, для начала, распишете общую логику?


Да конечно.

Есть товар, на него действует скидка (допустим 15%).
Я считаю процент, для вывода на карточке товара, таким от образом:

PHP:
скопировать код в буфер обмена
  1. 'saving'=> $result['price'] == 0 ? 100 : ceil((($result['price'] - $result['special'])/$result['price'])*100)


То есть:
$result['price'] - цена товара
$result['special'] - цена акции (то есть на сколько стал дешевле)

В конце получаю общий процент скидки.

Проблема в следующем:

Не могу ловить значения процента в некоторых товарах, при выводе получаю то 14% то 16% скидки.

При загрузке товара в систему, округляю все цены, есть цена 49.55 = 50, если цена 49.40 = 49...

Нужно грубо-говоря отобразить точный процент в конечном выводе.
(Добавление)


ceil не всегда считает как нужно, как-раз в этом моменте получается ошибка:

((45-38)/45)*100=15,5555555% - в этом моменте нужно ловить 15%.

45 - Стоимость товара
38 - Округленная скидка с 15% (я могу её округлить только в большую или меньшую сторону)
 
 Top
SAD
Отправлено: 25 Сентября, 2015 - 10:52:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




то есть, вы всегда пытаетесь выйти на 15%, при этом предварительно изменив цену товара в какую - то сторону? ну такое. есть вариант, но он для извращенцев.

если вы округилил цену в системе в большую сторону, то берете ceil для итогового процента, иначе floor. но это работает только для одного товара.

мини - вывод. что - то в вашей логике не то. а не то, имхо, округление товара в системе, а потом пытаться подгонять результат
 
 Top
Marattt
Отправлено: 25 Сентября, 2015 - 10:57:47
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




тебе нужно делать условие

PHP:
скопировать код в буфер обмена
  1.  
  2. $price = (($result['price'] - $result['special'])/$result['price'])*100
  3. if($price-intval($price) > 0.55)
  4. $price = ceil($price);
  5. else
  6. $price = floor($price);
  7.  

(Отредактировано автором: 25 Сентября, 2015 - 10:59:56)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB