我不确定整数除法实际上如何与十进制一起使用。考虑以下Python 3.x
上的两个示例:
4/0.4 = 10.0
4//0.4 = 9.0
常规除法得到10,但4除以0.4的整数得到9.0。
您知道整数与十进制相除的行为,为什么结果是这种方式吗?
答案 0 :(得分:0)
CPython对浮点数的底数除法(作为除数或除数)的实现位于float_floor_div
函数中,该函数调用float_divmod
函数(该函数实现了divmod
函数)进行实际计算,并使用以下代码行:
mod = fmod(vx, wx);
div = (vx - mod) / wx;
...
floordiv = floor(div);
告诉您底数对浮点数的工作方式是首先调用fmod
函数以获取除法的余数,从除数vx
中减去余数,然后除法除数wx
之前将其除以floor
,然后在所得商div
上应用4 % 0.4
函数。
如果您尝试执行0
的模运算,则期望它是>>> 4 % 0.4
0.3999999999999998
,因为4 / 0.4在数学上应为10:
Decimal
您将看到经典的floating error是二进制系统近似十进制数字的方式所固有的。结果是0.4实际上存储为稍大于0.4的东西,您可以通过使用0.4实例化一个高精度>>> from decimal import Decimal
>>> Decimal(0.4)
Decimal('0.40000000000000002220446049250313080847263336181640625')
对象来进行验证:
float_divmod
这就是为什么4%0.4的余数为0.3999999999999998998而不是0的原因,结果是>>> 4 - 4 % 0.4
3.6
用商来计算商,首先从股息中减去余数,得到:
>>> (4 - 4 % 0.4) / 0.4
9.0
很自然
WebDriver driver;