我应该如何在Perl中进行整数除法?

Bry*_*nny 57 perl integer-division

在Perl中总是进行整数除法的好方法是什么?

例如,我想:

real / int = int

int / real = int

int / int = int
Run Code Online (Sandbox Code Playgroud)

Mic*_*tha 83

词法范围的integerpragma强制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
Run Code Online (Sandbox Code Playgroud)


Bry*_*nny 44

你可以用Perl强制转换:

int(5/1.5) = 3;
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是整数除法将是int(5)/ int(1.5).否则,你只是围绕真正的分裂. (7认同)
  • 但int(5)/ int(1.5)!= int (6认同)
  • 这是完全错误的,因为通过intiger除法,我们完全丢弃了点之后的所有数字.然后使用int math 5/1.5是5/1 eq 5而不是3,如本例所示.当我们向上/向下舍入数字时,这是错误的,然后5/1.5是5/2 eq 2.5 => 3,但它偶然等于int(5/1.5).这不是规则. (5认同)
  • 对不起,这就是我真正要求的.在进行任何划分之后,我想要一个int结果.所以是的,我一直在寻找四舍五入. (4认同)
  • 注意浮点舍入问题:int(-6.725 / 0.025)为-268,POSIX :: floor(-6.725 / 0.025)为-269 [请参见perldoc](http://perldoc.perl.org/functions /int.html) (2认同)

小智 5

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是-1.

  • 不,"int"向零舍入,而正常向着向右舍入.运行`perl -le'printf"int(%s)是%d,round(%s)是%.0f; \n",($ _ + 0.5)x4代表-10..10'`你会看到像int(-3.5)这样的东西是-3,round(-3.5)是-4; int(-2.5)为-2,round(-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,round(1.5)为2; int(2.5)为2,round(2.5)为2; int(3.5)为3,round(3.5)为4; int(4.5)为4,round(4.5)为4; (4认同)