我最近在Stackoverflow上看到了答案,其中进行了计算以确定值是奇数还是偶数。使用的%
总是返回0或1,具体取决于与之比较的值。
我想知道这个%
的用法是什么,即使我在谷歌上搜索过,我也只能找到哈希中使用的%
。
$result = $str % 2;
非常感谢您提前。
答案 0 :(得分:7)
" modulo"运算符,请参阅perlop。
[...]计算第一个参数的第二个参数的除法余数。
答案 1 :(得分:7)
这个%
是一个模运算符,它返回左操作数的余数除以右操作数,如果左边的值可以被右边的值整除,则为零。如果它位于两个操作数之间,则它不表示哈希符号。
答案 2 :(得分:4)
模数运算符为整数除法提供余数。
如果数字是奇数或偶数,你会看到它被用来计算出来。将整数除以2时,得到的余数为0(如果数字为偶数)或1(如果数字为奇数)。
my $is_odd = $num % 2;
通常,模数将给出一个比表达式中右手操作数小0到1之间的整数。
与所有运营商一样,perldoc perlop中记录了这一点,其中包含:
二进制
"%"
是模运算符,它根据第二个参数计算第一个参数的除法余数。给定整数操作数$m
和$n
:如果$n
为正,则$m % $n
为$m
减去$n
的最大倍数小于或等于到$m
。如果$n
为否定,则$m % $n
为$m
减去$n
的最小倍数,且不小于$m
(也就是说,结果会更少大于或等于零)。如果操作数$m
和$n
是浮点值且$n
的绝对值(即abs($n)
)小于(UV_MAX + 1)
,则只有整数部分将在操作中使用$m
和$n
(注意:此处UV_MAX
表示无符号整数类型的最大值)。如果右操作数(abs($n)
)的绝对值大于或等于(UV_MAX + 1)
,"%"
计算等式$r
中的浮点余数($r = $m - $i*$n)
其中$i
是某个整数,使$r
与右操作数$n
具有相同的符号(不作为左操作数$m
C函数fmod()
)和绝对值小于$n
的绝对值。请注意,当use integer
在范围内时,"%"
使您可以直接访问C编译器实现的模运算符。这个运算符没有为负操作数定义,但它会更快地执行。
答案 3 :(得分:0)
如其他人所述,%
是modulo operator,它在进行算术除法后返回余数。通常需要余数(模数的结果) 和 商(除法的结果)。幸运的是,在Perl中同时获得两者都很容易!
我将采用一种有效的数学形式:dividend / divisor = quotient + remainder
。
您始终可以通过...获得商和余数。
my $dividend = 100;
my $divisor = 3;
my ($quotient, $remainder) = (int $dividend / $divisor, $dividend % $divisor);
print($dividend . ' / ' . $divisor . ' = ' . $quotient . ' (quotient) + ' . $remainder . ' (remainder)');
这给出了结果:
100 / 3 = 33 (quotient) + 1 (remainder)
这是一个不错的,有用的单行解决方案。这是一个带有时间示例的实际演示...
my $diff = 642;
my $divisor = 60;
my ($minutes, $seconds) = (int $diff / $divisor, $diff % $divisor);
print($minutes . ':' . $seconds);