61

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

例如,我想要:

real / int = int

int / real = int

int / int = int
4

7 回答 7

89

这个问题至少有两个合理的答案。(我最初只给出了答案 2。)

  1. 使用该int()函数将浮点计算结果截断为整数(丢弃小数部分),正如 Bryan 在他的自我回答中所建议的:#539805

  2. 使用use integerpragma使 Perl 将计算的输入和结果都截断为整数。它的范围在{ }块内。

例子:

print 3.0/2.1 . "\n";      # => 1.42857142857143
print 5.0/1.5 . "\n";      # => 3.33333333333333

print int(3.0/2.1) . "\n"; # => 1
print int(5.0/1.5) . "\n"; # => 3

{
  use integer;
  print 3.0/2.1 . "\n";    # => 1
  print 5.0/1.5 . "\n";    # => 5 (because 1.5 was truncated to 1)
}
print 3.0/2.1 . "\n";      # => 1.42857142857143 again
于 2009-02-12T02:49:50.413 回答
50

您可以在 Perl 中转换整数:

int(5/1.5) = 3;
于 2009-02-12T02:47:59.933 回答
8

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。

于 2009-12-14T20:07:15.733 回答
4

你可以:

use integer;

它由 Michael Ratanapintha 解释或手动使用:

$a=3.7;
$b=2.1;

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

注意,'int' 不是强制转换。这是将数字转换为整数形式的函数。这是因为 Perl 5 没有单独的整数除法。例外是当您“使用整数”时。那么你将失去真正的分裂。

于 2013-09-25T09:59:47.023 回答
0

希望它有效

整数(9/4)= 2。

谢谢 Manojkumar

于 2013-08-06T13:29:06.597 回答
0

整数除法 $x 除以 $y ...

$z = -1 & $x / $y

它是如何工作的?

$x / $y

返回浮点除法

&

执行按位与

-1

代表

&HFFFFFFFF

对于最大的整数...从哪里来

$z = -1 & $x / $y

给出整数除法 ...

于 2020-06-15T21:35:24.587 回答
-2

例如 9 / 4 = 2.25

整数(9)/整数(4)= 2

9 / 4 - 余数 / 分母 = 2

9 /4 - 9 % 4 / 4 = 2

于 2011-05-05T01:54:29.977 回答