首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >小数整除的结果是什么?

小数整除的结果是什么?
EN

Stack Overflow用户
提问于 2019-02-18 14:08:53
回答 1查看 541关注 0票数 2

我不确定整数除法实际上是如何与小数一起工作的。考虑到Python 3.x上的这两个示例

代码语言:javascript
运行
复制
4/0.4 = 10.0
4//0.4 = 9.0

正则除法得到10,但4除以0.4的整数除法得到9.0。

你知道整数除以小数的行为吗?为什么结果是这样的?

EN

回答 1

Stack Overflow用户

发布于 2019-02-18 14:55:23

CPython将浮点数的底除法实现为被除数或除数,位于float_floor_div函数中,该函数调用float_divmod函数(该函数实现divmod函数)进行实际计算,其代码如下:

代码语言:javascript
运行
复制
mod = fmod(vx, wx);
div = (vx - mod) / wx;
...
floordiv = floor(div);

告诉您地板除法对浮点数的作用方式是,首先调用fmod函数以获得除法的余数,从被除数vx中减去余数,然后将其除以除数wx,然后对得到的商div应用floor函数。

如果你尝试执行4 % 0.4的模运算,期望它是0,因为4/ 0.4在数学上应该是10:

代码语言:javascript
运行
复制
>>> 4 % 0.4
0.3999999999999998

您将看到从二进制近似十进制数的方式中固有的经典floating error。因此,0.4实际上被存储为略大于0.4的值,您可以通过使用0.4实例化一个高精度的Decimal对象来验证这一点:

代码语言:javascript
运行
复制
>>> from decimal import Decimal
>>> Decimal(0.4)
Decimal('0.40000000000000002220446049250313080847263336181640625')

这就是为什么4%0.4的余数是0.3999999999999998而不是0的原因,因此,使用float_divmod计算商的方式,首先从被除数中减去余数,得到:

代码语言:javascript
运行
复制
>>> 4 - 4 % 0.4
3.6

所以很自然的,

代码语言:javascript
运行
复制
>>> (4 - 4 % 0.4) / 0.4
9.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54741328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档