有人可以解释一下吗?

math.ceil(x) Return the ceiling of x as a float, the smallest integer value greater than or equal to x.

math.floor(x) Return the floor of x as a float, the largest integer value less than or equal to x.

当.ceil和.floor根据定义应该计算整数时,为什么会返回浮点数?

编辑:

好吧,这有一些很好的论据来说明为什么它们应该返回浮点数,而当@jcollado指出它们实际上确实在Python 3中返回整数时,我才刚刚习惯这个想法。

我的猜测是,这是因为x是浮点数,而不是整数,但是由于我不了解或使用Python,Ill让其他人更明确地回答。:)

@ Adam-,但是ceil / floor操作的全部要点是将浮点数舍入为整数!

当我第一次遇到它时,这也让我很生气,因为这似乎是错误的。 至少,使用int(floor(n))不太难。

具有讽刺意味的是(由于使用了浮点数来防止溢出),由于采用了浮点数表示,因此在64位int溢出之前,floor / ceil的返回值在低位无意义。 [这在32位的过去不是真的。]

浮点数的范围通常超过整数的范围。通过返回浮点值,函数可以为超出可表示整数范围的输入值返回一个有意义的值。

考虑:如果floor()返回整数,floor(1.0e30)应该返回什么?

现在,尽管Python的整数现在具有任意精度,但并不总是这样。标准库函数是等效C库函数的精简包装。

即使Python整数现在具有任意精度,仍然有一些浮点数的下限和上限不能用整数表示。尝试floor(float("inf"))或ceil(float("nan"))。

@ Michael-显然,在P3中,如果尝试这样做,您现在将获得OverflowExceptions。查看jcollados答案

嗯,它应该返回一个长型(也就是bigint),不是吗?似乎对我来说是一个显而易见的答案,但现在我觉得我有点天真。

@koschei:在Python 3.x中确实如此,请参阅jcollados答案。

另请参见对另一个答案的评论,为什么即使对于范围内的数字也有意义。

正如其他答案所指出的那样,在python中,它们返回浮点数的原因可能是出于防止溢出问题的历史原因。但是,它们在python 3中返回整数。

>>> import math

>>> type(math.floor(3.1))

>>> type(math.ceil(3.1))

您可以在PEP 3141中找到更多信息。

@ jcollado-您在哪里看到它们在P3中返回整数?

@Yarin我刚刚输入了上面的命令。同样,如果您尝试使用float("inf")或float("nan"),则会得到OverflowError异常。

@ jcollado-哇,有趣-我刚刚习惯了以浮点数形式返回的问题...

为了完整起见,Python numpy.floor和ceil返回浮点数()

@jcollado:float("inf")在Python 2.7或3中不会产生异常

@endolith你是对的,我已经检查过了,而且不再发生了。自2011年12月以来,多数民众赞成在其中有所更改。

有没有一种方法可以使python 2.x在Math.ceil()中返回整数(例如,导入将来的some_module)。我想避免做int(Math.ceil(..)),并记得在升级到3.x时将其删除。谢谢。

因为python的数学库是返回浮点数的C数学库的瘦包装。

C数学库支持任意精度的整数吗?因为多数民众赞成在其他python数学函数返回。

您的评论明显说明了您的困惑:

The whole point of ceil/floor operations is to convert floats to integers!

ceil和floor操作的重点是将浮点数据舍入为整数值。不做类型转换。需要获取整数值的用户可以在操作之后进行显式转换。

请注意,如果所有可用的是返回整数的ceil或float运算,则不可能简单地实现舍入到整数值。您首先需要检查输入是否在可表示的整数范围内,然后调用该函数;您将需要在单独的代码路径中处理NaN和无穷大。

此外,如果要符合IEEE 754,则必须具有返回浮点数的ceil和floor版本。

斯蒂芬-我重写了我的评论-我的意思是回合,而不是not依。但这不是我困惑的根源,而是我没有意识到距离差异。

可悲的是,我今天得票了。这是正确的答案,远胜于任何表示形式上的限制。

在我多年的编程工作中,我不记得曾经遇到过我希望下限/上限的结果是浮点数而不是整数的情况。 python3确实返回整数这一事实表明,这实际上是更有用的事情。我不赞成"……的要点"主张;似乎您是根据要执行的操作来定义要点,而不是程序员可能想要的。

@ShreevatsaR我有几次这种情况(但是,主要是在Python上下文之外)。我记得的时代是使用Mandelbrot集的时候。有时您需要做一个整数值,但是之后立即对该值进行一些浮点运算(例如,将其缩放为0.5)。然后,与先将其转换为int然后立即将其转换回float相比,保持地板的float并对其执行浮点操作要高效得多。

在Python 2.4之前的版本中,整数不能容纳所有范围的截断实数。

http://docs.python.org/whatsnew/2.4.html#pep-237-unifying-long-integers-and-integers

现在,它也无法保存"完整范围的截断实数",因为这显然是一个无限集,因此将需要无限数量的内存。它可以容纳截断的浮点数的范围,该范围只是?的一小部分。

@leftaroundabout-挑剔!你明白我的意思。

这是一个非常有趣的问题!由于浮点数需要一些位来存储指数(= bits_for_exponent),任何大于2**(float_size - bits_for_exponent)的浮点数将始终是整数值!在另一极端,具有负指数的浮点将给出1,0或-1之一。这使整数范围与浮点范围的讨论变得毫无意义,因为只要数字超出整数类型的范围,这些函数将简单地返回原始数字。 python函数是C函数的包装器,因此,这确实是C函数的不足之处,在这些函数中,它们应该返回一个整数,并迫使程序员在调用之前进行range / NaN / Inf检查小区/地板。

因此,逻辑上的答案是这些函数唯一有用的函数,它们将返回整数范围内的值,因此,它们返回浮点数的事实是一个错误,您非常聪明地意识到这一点!

因为float的范围大于整数的范围-返回整数可能会溢出

整数不会在Python中溢出;当它们变得太大时,其整数将转换为bigints。打开一个Python解释器并输入" 2 ** 500",您会看到您得到了一个可以像对待int一样对待的对象。

@koschei:试图表示无穷大时,即使bigints也会溢出。

也许因为其他语言也这样做,所以这是普遍接受的行为。 (有充分的理由,如其他答案所示)

还是查尔斯所说的。 :)

如果它将始终执行"其他人的操作",那将不是Python。

python中的math.floor可以用于整数吗_为什么Python的math.ceil()和math.floor()操作返回浮点数而不是整数?...相关推荐

  1. python中表示单一数据的类型被称为_各种Python数据类型的完整列表

    各种Python数据类型的完整列表 如今,Python是最受欢迎的编程语言之一.它允许开发人员将所有精力都放在实现上,而不是将复杂的程序和python中的数据类型用于此目的只是为了简化我们的工作. P ...

  2. python中序列类型和数组之间的区别_「Python」序列构成的数组

    一.Python 标准库的序列类型分为: 容器序列: 能够存放不同类型数据的序列(list.tuple.collections.deque). 扁平序列: 只能容纳一种类型的数据(str.bytes. ...

  3. python中max()、min()获得最大值与最小值_(Python基础教程之十)Python max()和min()–在列表或数组中查找最大值和最小值...

    使用**max()和min()**方法在可比较元素的集合(例如列表,集合或数组)中查找最大(或最小)项的Python示例. 1. Python max() function max() 该功能用于– ...

  4. python中init方法的两个下划线_为什么Python中有各种各样的“_”下划线?分别有什么用?...

    刚开始学Python的你一定很疑惑,为什么Python里会出现各种各样的下划线 "_",而且位置都不相同,有时候在名称后面,有时候在前面,有时候还会在数字中间......这些下划线 ...

  5. 在python中有关函数的表达正确的是_在 Python 中有关函数的表达中正确的是( )。_学小易找答案...

    [单选题]会稽有佳山水,名士多居之,爱好养生的王羲之常与( )等宴集于山阴之兰亭. [判断题]截交线既在截平面上,又在立体表面上,故截交线是截平面与立体表面的共有线,截交线上每一点均为其共有性. [单 ...

  6. python中的装饰器、装饰器模式_浅析Python装饰器以及装饰器模式

    漫谈 如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变. 我以前也看过很 ...

  7. 在python中数据的输出用哪个函数名_在Python中,数据的输出用哪个函数名

    在Python中,数据的输出用哪个函数名 工业机器人按照坐标形式可以分为().A:圆柱坐标机器人B:球坐标机器人C:直角坐标机器人D:关节坐标机器人 生物膜上脂质主要是磷脂.A:对B:错 再结晶退火主 ...

  8. python中一般使用几个空格表示缩进_为什么Python pep-8强烈建议使用标签上的空格来缩进?...

    为什么Python pep-8强烈建议使用标签上的空格来缩进? 我在Stack Overflow和PEP 8上看到,建议仅在Python程序中使用空格进行缩进. 我能理解一致压痕的必要性,我感到痛苦. ...

  9. python中定义变量有引号和单引号_说说Python 单引号、双引号、三引号的区别?...

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  10. python中float与eval式一样的吗_用Python最原始的函数模拟eval函数的浮点数运算功能...

    前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数. 我仿佛记得以前新手时,对这个问题完全不知道如何下手. 我觉得处理括号实在是太复杂了,多层嵌套括号怎么解析呢?一些多余的括号 ...

最新文章

  1. 基因测序3——三、四代测序技术来势汹汹,国产化仍在布局二代测序?
  2. 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
  3. 根据”so劫持”过360加固详细分析
  4. 如何判断一个常量是废弃常量,一个类是无用类
  5. Winodws Socket I/O模型的整理
  6. python numpy矩阵索引_Numpy中的矩阵索引
  7. spring集成struts2
  8. android系统广播 定向广播,Android之定向广播
  9. 微信红包发放接口服务器签名失败,微信现金红包接口开发注意的事项
  10. 多国电子书盈利模式分析
  11. 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)
  12. 02-Axure9.0软件布局及介绍
  13. 必读科普书籍科普三部曲《变化》《见微知著》《探索生命》
  14. 重启MySQL报Unit mysqld.service could not be
  15. MySQL单表数据量大优化方案及注意事项
  16. springcloudAlibaba+dubbo线程拥堵Thread pool is EXHAUSTED
  17. 收盘涨幅大于1.5%小于5%的选股公式
  18. 3D漫游结合行业应用,实现企业营销价值
  19. Revit中土建模块【精准生梁】快速生成
  20. 深度解析ConcurrentHashMap

热门文章

  1. 函数名应用,闭包,装饰器初识
  2. css3 圣诞红包雨效果
  3. 二分图最大匹配(匈牙利算法) URAL 1721 Two Sides of the Same Coin
  4. MAC自带的lnmp
  5. 考场自动安排工具开发手记
  6. OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
  7. 智能优化算法:海洋捕食者算法
  8. gdal.Buildvrt和gdal.Warp工具实现TIF影像拼接、矢量裁剪
  9. 微信小程序学习总结(一)——程序文件内容
  10. VC6.0无法进入调试