将小数/浮点数四舍五入为整数时,在 python 中使用 round、floor 或 ceil 有什么区别?

如何解决将小数/浮点数四舍五入为整数时,在 python 中使用 round、floor 或 ceil 有什么区别?

尝试将小数点值(浮点数)四舍五入为整数时,python 中的 roundmath.floormath.ceil 函数间的实际区别是什么?

解决方法

使用示例快速回答

区别在于它们如何截断和舍入输入。

round 向最接近的整数舍入(通过选择偶数打破平局),math.floor-inf 舍入,math.ceil+inf 舍入。>

还值得注意的是,round(x,0) 返回 floatround(x)floor(x)ceil(x) 返回整数。

这里有几个例子:

输入(x) round(x) math.floor(x) math.ceil(x)
1.4 1 1 2
1.5 2 1 2
1.6 2 1 2
-1.4 -1 -2 -1
-1.5 -2 -2 -1
-1.6 -2 -2 -1
2.5 2 2 3
3.5 4 3 4
4.5 4 4 5
-2.5 -2 -3 -2
-3.5 -4 -4 -3
-4.5 -4 -5 -4

注意 round(-1.4) 如何产生 -1math.floor(-1.4) 产生 -2

另请注意 round(2.5) 如何产生 2round(3.5) 产生 4

更长的答案

round

更长的解释是,当您使用 round(x)round(x,0) 时,Python 使用名为 round half to even 的方法。该方法查找最接近的整数。在距离与较大和较小整数相同的情况下,顾名思义,算法通过选择最接近的偶数数来打破平局。这就是 round(2.5) 产生 2 的原因:因为 2.5 与 2 和 3 的距离相等,并且在有两个距离相等的选择的情况下,算法会选择偶数选择。

可以在 herehere 中找到 Python 文档。 This SO question 也值得一试。

math.floormath.ceil

另一方面,math.floormath.ceil 分别显式地采用比输入值更小和更大的最接近的整数。这就是为什么说他们“向 -/+ inf”四舍五入。

以以下示例为例:-1.4。在这种情况下,小于或等于输入的最接近的整数(即,最接近 -inf)是 -2。这就是 math.floor(-1.4) 产生 -2.0 的原因。类似地,大于或等于输入的最接近整数(即,最接近 +inf)是 -1,这就是 math.ceil(-1.4) 产生 -1 的原因。

这里是 floorceil 的 Python 文档链接

(感谢 @MarkDickinson 指出了我原答案中的一些错误!)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?