【发布时间】:2010-10-07 02:09:33
【问题描述】:
在 Perl 中总是进行整数除法的好方法是什么?
例如,我想要:
real / int = int
int / real = int
int / int = int
【问题讨论】:
标签: perl integer-division
在 Perl 中总是进行整数除法的好方法是什么?
例如,我想要:
real / int = int
int / real = int
int / int = int
【问题讨论】:
标签: perl integer-division
这个问题至少有 2 个合理的答案。 (我最初只给出了答案2。)
使用 int() 函数将浮点计算结果截断为整数(去掉小数部分),正如 Bryan 在他的自我回答中所建议的那样:#539805
使用use integer pragma 使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
【讨论】:
您可以在 Perl 中转换整数:
int(5/1.5) = 3;
【讨论】:
int(-6.725/0.025) 是 -268 和 POSIX::floor(-6.725/0.025) 是 -269 see perldoc
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。
【讨论】:
int 向零舍入,而正常向偶数舍入。运行perl -le 'printf "int(%s) is %d, round(%s) is %.0f;\n", ($_+0.5)x4 for -10..10',你会看到像 int(-3.5) is -3, round(-3.5) is -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;
你可以:
use integer;
由 Michael Ratanapintha 解释或手动使用:
$a=3.7;
$b=2.1;
$c=int(int($a)/int($b));
注意,'int' 不是强制转换。这是将数字转换为整数形式的函数。 这是因为 Perl 5 没有单独的整数除法。例外是当您“使用整数”时。那么你将失去真正的分裂。
【讨论】:
希望有效果
int(9/4) = 2.
谢谢 马诺库马尔
【讨论】:
整数除法 $x 除以 $y ...
$z = -1 & $x / $y
它是如何工作的?
$x / $y
返回浮点除法
&
执行按位与
-1
代表
&HFFFFFFFF
对于最大的整数...从哪里来
$z = -1 & $x / $y
给出整数除法...
【讨论】:
perl -E 'my($x,$y)=(-12,4); my $z = -1 & $x/$y; say int($x/$y); say $x/$y; say $z;' 将给出:-3、-3、18446744073709551613。
例如 9 / 4 = 2.25
int(9) / int(4) = 2
9 / 4 - 余数 / 分母 = 2
9 /4 - 9 % 4 / 4 = 2
【讨论】: