Forum Webscript.Ru

Программирование => Perl => Тема начата: Труба-Дур от 17 Сентября 2002, 11:36:00

Название: Матем. функция!
Отправлено: Труба-Дур от 17 Сентября 2002, 11:36:00
Заранее извените что такой вопрос.
Но сколько я не сикал я так и не нашел математич. функцию, которая округляет число до большего значения...
например 2.1 до 3-х или 2.9 до 3!
я могу конечно написать свою функц которая будет это делать, но может всётаки есть эта функция?:)
Название: Матем. функция!
Отправлено: Chs от 17 Сентября 2002, 11:50:56
perldoc -q round
Название: Матем. функция!
Отправлено: Труба-Дур от 17 Сентября 2002, 12:15:57
А разве round так округляет, я думал он стандартно округяет !
Название: Матем. функция!
Отправлено: Serchey от 17 Сентября 2002, 14:26:02
sub trunc {
 my $num = shift;
 my $dig = shift;
 $dig = 2 unless defined $dig;
 my $tmp_num;

 if($num =~ /\\./){
  if($dig){
   if(length(substr($num,(index($num,\'.\')+1))) > $dig){
    $tmp_num = substr($num,0,(index($num,\'.\')+$dig+1));
    $dig = substr($num,(index($num,\'.\')+$dig+1),1);
    if($dig >= 5){
     my $tmp = "0.".("0" x (length(substr($tmp_num,index($tmp_num,\'.\')))-2));
     $tmp.="1";
     $tmp_num+=$tmp;
    }
    $num = $tmp_num;
   }
  } else {
   $dig = substr($num,(index($num,\'.\')+1),1) >= 5?1:0;
   $num =~ s/\\..*$//;
   $num+=$dig;
  }
 }
 return $num;
}
- тоже вариант.
Узадж: trunc($num[,n]), где n - до какого разряда после запятой нужно округлить. По умолчанию n = 2.
Название: Матем. функция!
Отправлено: GotZfild от 17 Сентября 2002, 17:01:46
use POSIX qw(ceil);
print ceil(3.7);
Название: Матем. функция!
Отправлено: Труба-Дур от 18 Сентября 2002, 07:20:30
Serchey круто :)
GotZfild а POSIX стандарт или как?:)
Название: Матем. функция!
Отправлено: Serchey от 18 Сентября 2002, 12:55:40
POSIX - стандарт для UNIX, а под Виндузу... ?
Название: Матем. функция!
Отправлено: NeoNox от 18 Сентября 2002, 13:16:35
Цитировать
а под Виндузу...

Он же. Аки модуль.
Название: Матем. функция!
Отправлено: Chs от 19 Сентября 2002, 22:18:37
Цитировать
А разве round так округляет, я думал он стандартно округяет !

Я не предлагал функцию round.:)
В том факе, который perldoc находит по этому запросу есть про round, flor и ceil.
Название: Матем. функция!
Отправлено: Зарегистрироваться? от 29 Сентября 2002, 20:16:29
А так нельзя?




sub floor
{
   return int(shift);
}



sub ceil
{
   my $n = shift;
   my $i = int $n;  #integer
   my $r = $n - $i; #remainder

   return $i + $r>0?1:0;
}



sub round
{
   my $n = shift;
   my $i = int $n;  #integer
   my $r = $n - $i; #remainder

   return $i + $r*10%10>=5?1:0;
}
Название: Матем. функция!
Отправлено: Serchey от 29 Сентября 2002, 23:32:51
нет
Название: Матем. функция!
Отправлено: Ленивый гость от 30 Сентября 2002, 22:50:26
Почему? Неужели не будет работать?
Название: Матем. функция!
Отправлено: Serchey от 01 Октября 2002, 10:32:21
Ленивый гость, а ты пробовал? Да и потом - тут не код, а непонятно что. (хотя идея есть)
Название: Матем. функция!
Отправлено: Mog. от 01 Октября 2002, 17:19:04
А если так :

sub okruglim{
if($number > int($number)){$number=(int($number)+1)}
return $number;
}
Название: Матем. функция!
Отправлено: st_steev от 01 Октября 2002, 19:01:18
А если так?:)
$C="2.9";
$C=sprintf("%.0f",$C);
print "$C";