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才對。
新聞熱點
疑難解答