Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Округление дробной части числа

#11 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84
0

Отправлено 01 Июль 2014 - 11:56

http://www.php.net/m...ction.round.php

 

Вот идеально для изучения вам .


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#12 Ixman

Ixman
    Topic Starter
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 01 Июль 2014 - 13:45

kamchatniyoleg,  читал я это, но не тот вариант, что меня интересовал.


  • 0

#13 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 01 Июль 2014 - 13:48

Ixman, а что именно требовалось , просто по моему решает все проблемы ...


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#14 Ixman

Ixman
    Topic Starter
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 01 Июль 2014 - 14:05

мне нужно, чтобы округляло дробную часть, если она меньше 0,5 - то до целого числа в меньшую сторону, а если больше 0,5 - то до 0,5 (например 4,65 => 4.5 или 4,45 => 4)


  • 0

#15 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 01 Июль 2014 - 16:55

Вариант собственной функции (функция также осуществляет необходимую минимальную проверку):

function rounding($num){
    // преобразуем запятую в плавающую точку
    $num = str_replace(',', '.', $num);
    // проверка на ожидаемый тип
    $num = floatval($num);

    // получаем целую и дробную части
    $nums = explode('.', $num);
    // если нет дробной части - вернем целую часть
    if( !isset( $nums[1] ) ) return $nums[0];

    // если дробная часть > 0.5 - вернем целую часть + 0.5
    if( (0 . '.' . $nums[1]) > 0.5 ) return $nums[0] + 0.5;
    // иначе - вернем целую часть
    else return $nums[0];
}
echo rounding(4.65); // 4.5
echo rounding('4,65'); // 4.5
echo rounding(4.45); // 4
echo rounding(0.5); // 0
echo rounding(0.51); // 0.5
echo rounding(4); // 4
echo rounding('string'); // 0
echo rounding(''); // 0

Поскольку в условии сказано >0.5 и <0.5, но не говорится о ==0.5, функция округляет 0.5 в меньшую сторону. Если нужно, чтобы 0.5 не округлялось, тогда меняем условие на следующее:

if( (0 . '.' . $nums[1]) >= 0.5 ) return $nums[0] + 0.5;

Сообщение отредактировал matroskin8: 01 Июль 2014 - 17:02

  • 0


#16 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 01 Июль 2014 - 17:00

matroskin8, Нормальный подход , я сразу непонял что нужно было )) Сам недавно сталкивался . Реализовывал по аналогии 


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#17 Ixman

Ixman
    Topic Starter
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 01 Июль 2014 - 18:33

 я решил так эту задачу

function arounds($nb) {

        if(!is_numeric($nb)) {
            return false;
        }

        $sup = ceil($nb);
        $inf = floor($nb);
        $try = (double) $inf . '.5' ;

        if($nb > $try) {
            return $sup;
        } else if ($nb < 1) {
            return 0;
	}

        return $try;
    }

  • 0

#18 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 02 Июль 2014 - 08:15

Ixman, Подход тоже оригинальный , но по моему чисто субъективному мнению , решение которое у matroskin8 более правильное и аккуратное .


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#19 Ixman

Ixman
    Topic Starter
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 02 Июль 2014 - 08:34

kamchatniyoleg, не спорю, возможно оно лучше.  


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru