Python中的Modulo运算符

Kod*_*ior 53 python operators python-3.x

以下代码中的模数是做什么的?

from math import *
3.14 % 2 * pi
Run Code Online (Sandbox Code Playgroud)

我们如何计算浮点数的模数?

Ble*_*der 65

当你有表达式时:

a % b = c
Run Code Online (Sandbox Code Playgroud)

这实际上意味着存在一个正整数n,使c尽可能小,但非负.

a - n*b = c
Run Code Online (Sandbox Code Playgroud)

手动,你可以一遍又一遍地减去2(或添加2你的数字是负数),直到最终结果是可能的最小正数:

  3.14 % 2
= 3.14 - 1 * 2
= 1.14
Run Code Online (Sandbox Code Playgroud)

此外,3.14 % 2 * pi被解释为(3.14 % 2) * pi.我不确定你是否打算写3.14 % (2 * pi)(在任何一种情况下,算法都是相同的.只需减去/添加,直到数字尽可能小).

  • 我更喜欢解释x%y是x - (math.floor(x/y)*y)这与你说的相同,但看起来对我来说更容易理解 (3认同)

Tho*_*mas 24

除了其他答案之外,fmod文档还有一些有趣的话题:

math.fmod(x, y)

返回fmod(x, y),由平台C库定义.请注意,Python表达式x % y可能不会返回相同的结果.C标准的目的fmod(x, y)是精确地(数学上;到无限精度)等于x - n*y某个整数n,使得结果具有相同的符号,x并且幅度小于abs(y).Python x % y返回带有符号的结果y ,并且可能不能完全计算浮点参数.例如,fmod(-1e-100, 1e100)是的-1e-100,但是Python的结果 -1e-100 % 1e1001e100-1e-100,它不能完全表示为浮点数,并且是令人惊讶的1e100.出于这个原因,fmod()使用浮点数时通常首选函数,而x % y使用整数时首选Python .