如何解决将小数/浮点数四舍五入为整数时,在 python 中使用 round、floor 或 ceil 有什么区别?
尝试将小数点值(浮点数)四舍五入为整数时,python 中的 round
、math.floor
和 math.ceil
函数之间的实际区别是什么?
解决方法
使用示例快速回答
区别在于它们如何截断和舍入输入。
round
向最接近的整数舍入(通过选择偶数打破平局),math.floor
向 -inf
舍入,math.ceil
向 +inf
舍入。>
还值得注意的是,round(x,0)
返回 float
而 round(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)
如何产生 -1
而 math.floor(-1.4)
产生 -2
。
另请注意 round(2.5)
如何产生 2
而 round(3.5)
产生 4
。
更长的答案
round
更长的解释是,当您使用 round(x)
或 round(x,0)
时,Python 使用名为 round half to even 的方法。该方法查找最接近的整数。在距离与较大和较小整数相同的情况下,顾名思义,算法通过选择最接近的偶数数来打破平局。这就是 round(2.5)
产生 2
的原因:因为 2.5 与 2 和 3 的距离相等,并且在有两个距离相等的选择的情况下,算法会选择偶数选择。
可以在 here 和 here 中找到 Python 文档。 This SO question 也值得一试。
math.floor
和 math.ceil
另一方面,math.floor
和 math.ceil
分别显式地采用比输入值更小和更大的最接近的整数。这就是为什么说他们“向 -/+ inf”四舍五入。
以以下示例为例:-1.4
。在这种情况下,小于或等于输入的最接近的整数(即,最接近 -inf
)是 -2。这就是 math.floor(-1.4)
产生 -2.0
的原因。类似地,大于或等于输入的最接近整数(即,最接近 +inf
)是 -1,这就是 math.ceil(-1.4)
产生 -1
的原因。
这里是 floor
和 ceil
的 Python 文档链接
(感谢 @MarkDickinson 指出了我原答案中的一些错误!)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。