2009-02-12 3 views

ответ

36

Вы можете бросить Интс в Perl:

int(5/1.5) = 3; 
+5

Да, но целочисленным делением будет int (5)/int (1.5).В противном случае вы просто округлите реальное разделение. – Rog

+4

, но int (5)/int (1.5)! = Int – Learning

+2

Извините, этого я действительно просил. Я хотел получить результат int после какого-либо разделения. Так что да, я искал округления. –

75

лексически область действия integer pragma силы 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», а затем вне блока, будут использоваться стандартные реальные вычисления как до, так и после блока. – Znik

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) равен% d, round (% s) равен% .0f; \ n ", ($ _ + 0.5) x4 для -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, раунд (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; – tchrist

+0

@tchrist На самом деле нормальное округление приближается к ближайшему; только пограничный кейс .5 раундов в сторону. – fishinear

-2

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

INT (9)/Int (4) = 2

9/4 - остальное/deniminator = 2

9/4 - 9% 4/4 = 2

+3

Этот ответ совершенно неверен. «int (9)/int (4) == 2.25», поэтому я думаю, что Павел имел в виду int (9/4) –

+0

Я думаю, что он не тестировал свои примеры – Znik

0

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

Int (9/4) = 2.

Благодаря Manojkumar

3

вы можете:

use integer; 

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

$a=3.7; 
$b=2.1; 

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

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