Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нестандартное округление чисел
 
 автор: Владимир55   (07.12.2012 в 13:21)   письмо автору
 
 

Функция round позволяет округлять числа, устанавлявая количество знаков после запятой или количество нулей в целом числе.

А каким образом можно округлять дробные числа до двух, до пяти, до двадцати, до пятидесяти?

  Ответить  
 
 автор: DJ Paltus   (07.12.2012 в 13:28)   письмо автору
 
   для: Владимир55   (07.12.2012 в 13:21)
 

Можно примерчик?

  Ответить  
 
 автор: Владимир55   (07.12.2012 в 13:40)   письмо автору
 
   для: DJ Paltus   (07.12.2012 в 13:28)
 

Округляем до пяти:
Имеется 1003 Должно быть после округления 1005

Округляем до двадцати:
Имеется 157 Должно быть после округления 160

Округление до пятидесяти:
Имеется 157 Должно быть после округления 150

Сами правила округления, используемые в round, и в этой задаче подходят.

  Ответить  
 
 автор: DJ Paltus   (07.12.2012 в 13:58)   письмо автору
 
   для: Владимир55   (07.12.2012 в 13:40)
 

<?php
function my_round($arg$base){
    
//arg - округляемое число, $base - "округлитель"
    
$ost $arg%$base//вычисляем остаток от деления
    
$chast floor($arg/$base); //находим количество целых округлителей в аргументе
    
if($ost >= $base/2)    $rez = ($chast+1) * $base//выбираем направление округления
    
else $rez $chast $base;
    return 
$rez;
}
echo 
my_round(10035); //1005
?>

  Ответить  
 
 автор: Владимир55   (07.12.2012 в 14:14)   письмо автору
 
   для: DJ Paltus   (07.12.2012 в 13:58)
 

Прекрасно работает, спасибо!

Особая благодарность за комментарий в коде.

  Ответить  
 
 автор: Drago   (07.12.2012 в 19:53)   письмо автору
 
   для: Владимир55   (07.12.2012 в 14:14)
 


<?php

function customRound($number$base)
{
    if (
$base == 0
        return 
$number;

    
$mod $number $base;
    return 
$number $mod round($mod $base) * $base;
}

echo 
customRound(10035);

  Ответить  
 
 автор: Владимир55   (24.02.2013 в 12:26)   письмо автору
 
   для: Drago   (07.12.2012 в 19:53)
 

К сожалению, эта функция "спотыкается" на дробях: echo customRound(1003.3, 5); дает 1005.3

  Ответить  
 
 автор: Владимир55   (24.02.2013 в 13:36)   письмо автору
 
   для: Владимир55   (24.02.2013 в 12:26)
 

А если сделать так:
<?php

    $x 
1003.9;
    
$d 5;

    echo (
round ($x/$d)) * $d;


Вроде бы, тоже работает. Или в этом коде есть какой-то дефект, который я не вижу?

  Ответить  
 
 автор: Drago   (25.02.2013 в 01:00)   письмо автору
 
   для: Владимир55   (24.02.2013 в 13:36)
 

Отличный вариант, дефекта нет.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования