Как сделать целочисленное деление в Perl?

что такое хороший способ всегда сделать целочисленное деление в Perl?

например, я хочу:

real / int = int

int / real = int

int / int = int

6 ответов


лексически scoped integer ПРАГМА заставляет Perl использовать целочисленную арифметику в своей области:

print 3.0/2.1 . "\n";    # => 1.42857142857143
{
  use integer;
  print 3.0/2.1 . "\n";  # => 1
}
print 3.0/2.1 . "\n";    # => 1.42857142857143

вы можете бросить ints в Perl:

int(5/1.5) = 3;

int(x+.5) круглые положительное значения к ближайшему целому числу. Округление сложнее.

чтобы повернуть к нулю:

int($x)

для решений ниже, включите следующее заявление:

use POSIX;

округлить: POSIX::floor($x)

сгонять: POSIX::ceil($x)

чтобы округлить от нуля:POSIX::floor($x) - int($x) + POSIX::ceil($x)

округлить до ближайшего целого числа: POSIX::floor($x+.5)

отметим, что int($x+.5) неудачно для отрицательных значений. int(-2.1+.5) и int(-1.6), что равно -1.


вы можете:

use integer;

это объясняется Michael Ratanapintha или же использовать вручную:

$a=3.7;
$b=2.1;

$c=int(int($a)/int($b));

обратите внимание, ' int ' не является кастингом. это функция для преобразования числа в целочисленную форму. это связано с тем, что Perl 5 не имеет отдельного целочисленного деления. исключение - когда вы "используете integer". Тогда вы потеряете настоящее разделение.


надеюсь, что он работает

int (9/4) = 2.

спасибо Manojkumar


например 9 / 4 = 2.25

int (9) / int(4) = 2

9 / 4 - остаток / deniminator = 2

9 /4 - 9 % 4 / 4 = 2