Python中的取模运算符%用于返回两个数相除时的余数部分。
取模运算符%属于算术运算符。
%运算符的语法格式如下:
res = a % b
这里 的 a 相当于被除数, b 为除数, res 为运算结果,即 a 除以 b 后的余数。
如果 a 和 b 都为整数,则余数也是一个整数。如果 a 和 b 中有一个是浮点数,则运算结果也为浮点数。
下面给出一些具体的例子来了解 % 的使用及输出结果情况。
>>> 8 % 3
2
>>> 3 % 3
0
>>>
>>> 8 % 3.0
2.0
>>> 9 % 3.0
0.0
>>> 2.1 % 3
2.1
>>> 11 % 3.3
1.1000000000000005
>>> 13.5 % 3.3
0.3000000000000007
>>>
在上面的例子中可以看出,两个数中有一个数为浮点数时,输出的结果也为浮点数,最后两个例子由于精度问题,输出的值较长,实际上其结果分别为 1.1 和 0.3。
从上面的例子和输出结果可以看出,当两个数中有浮点数时,两个数的商数(应为一个正整数)与被除数b相乘时的结果最接近被除数 a ,但不超过 a ,所得余数即为 a % b 的结果。
Python中的取模运算符 % 可以运用到负数中,看下面的一些例子。
>>> -4 % 3
2
>>> -4 % -3
-1
>>> -13.5 % 3.3
2.999999999999999
>>> 13.5 % -3.3
-2.999999999999999
>>>
从上面的例子中可以看出,负数的模运算结果的符号总是与除数的符号保持一致。
例子中最后两个输出结果的原因是由于精度原因造成的,正确结果分别为3.0和-3.0。
上面的结果可以使用 a - n * b 来推断,整数 n 的取值要保证使 a - n * b 的结果小于 b 的绝对值, n 的符号应与 a 的符号保持一致。如,对于 -13.5 % 3.3 来说,n的取值为-5, 则:a - n * b = -13.5 - ( - 5) * 3.3 = 3.0;对于 13.5 % -3.3 来说,n = 5,则 a - n * b = 13.5 - 5 * (-3.3) = -3.0。
这个规则适用于a,b取值的所有类型情况。
在上面浮点数模运算时,我们注意到了一些结果并不令人满意,如3.0的输出为:2.999999999999999,这种我们还可以认为是正确的结果。
但当使用 % 对于浮点数进行取模运算时,可能会得到一些意外的结果,如下面的例子:
>>> 9.6 % 3.2
>>> 3.1999999999999993
>>>
我们知道,9.6 % 3.2的结果实际上为 0.0,但使用Python计算结果却很离谱。
这是由于,在计算机中,使用二进制来表示一个数,但对于小数来说,二进制不能精确的来表示一个小数,比如:1/3,这种情况往往使用一个近似数来表示它。由于这种近似才导致了一些意外的输出。
上面的结果实际上相当于3.2,但模运算的结果应小于除数的绝对值,所以其实际结果应为0.0才对。
新闻热点
疑难解答