Как мне сделать целочисленное деление в Perl? - PullRequest
53 голосов
/ 12 февраля 2009

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

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

real / int = int

int / real = int

int / int = int

Ответы [ 6 ]

80 голосов
/ 12 февраля 2009

Лексически ограниченная 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
40 голосов
/ 12 февраля 2009

Вы можете разыграть целые числа в Perl:

int(5/1.5) = 3;
5 голосов
/ 14 декабря 2009

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.

3 голосов
/ 25 сентября 2013

Вы можете:

use integer;

это объясняется Майклом Ратанапинтой или же используется вручную:

$a=3.7;
$b=2.1;

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

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

0 голосов
/ 06 августа 2013

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

int (9/4) = 2.

Спасибо Manojkumar

0 голосов
/ 05 мая 2011

Например, 9/4 = 2,25

int (9) / int (4) = 2

9/4 - остаток / дениминатор = 2

9/4 - 9% 4/4 = 2

...