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

44

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

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

real / int = int

int / real = int

int / int = int
Теги:
integer-division

6 ответов

35
Лучший ответ

Вы можете использовать ints в Perl:

int(5/1.5) = 3;
  • 5
    Да, но целочисленное деление будет int (5) / int (1.5). В противном случае вы просто округлите реальное деление.
  • 5
    но int (5) / int (1.5)! = int
Показать ещё 4 комментария
74

Лексически ограниченная 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
  • 0
    Дополнительная информация, заключенная в круглые скобки 'use integer' внутри блока, а затем вне блока, будет использоваться стандартным реальным вычислением как до, так и после блока.
4

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.

  • 4
    Нет, int округляет до нуля, в то время как нормальное округляет его до четного. Запустите perl -le 'printf "int(%s) is %d, round(%s) is %.0f;\n", ($_+0.5)x4 for -10..10' и вы увидите такие вещи, как int (-3,5) равно -3, округлое (-3,5) равно -4; int (-2,5) - -2, округленный (-2,5) - -2; int (-1,5) равно -1, round (-1,5) равно -2; int (-0,5) равно 0, round (-0,5) равно -0; int (0.5) равно 0, round (0.5) равно 0; int (1.5) равно 1, раунд (1.5) равен 2; int (2.5) равно 2, раунд (2.5) равен 2; int (3.5) - 3, раунд (3.5) - 4; int (4.5) - 4, раунд (4.5) - 4;
  • 0
    @tchrist На самом деле нормальное округление в сторону ближайшего; только пограничный случай .5 раундов в сторону даже.
3

вы можете:

use integer;

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

$a=3.7;
$b=2.1;

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

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

0

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

int (9/4) = 2.

Спасибо Manojkumar

-2

Eg 9/4 = 2,25

int (9)/int (4) = 2

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

9/4 - 9% 4/4 = 2

  • 3
    Этот ответ совершенно неверный. «int (9) / int (4) == 2,25», поэтому я думаю, что Пол имел в виду int (9/4)
  • 0
    Я думаю, что он не проверял свои примеры

Ещё вопросы

Сообщество Overcoder
Наверх
Меню