是否有一种简单的 Pythonic 方法可以在不使用浮点的情况下舍入到最接近的整数?我想使用整数算术执行以下操作:
skip = int(round(1.0 * total / surplus))
==============
@John:浮点无法跨平台重现。如果您希望您的代码在不同平台上通过测试,那么您需要避免使用浮点(或在您的测试中添加一些 hacky espilon 的东西并希望它有效)。以上可能很简单,在大多数/所有平台上都是相同的,但我宁愿不做出这样的决定,因为完全避免浮点更容易。怎么会“不符合 Python 的精神”?
最佳答案
你可以很简单地做到这一点:
(n + d // 2) // d
, 其中 n
是股息和d
是除数。
(((n << 1) // d) + 1) >> 1
等替代方案或等效的(((n * 2) // d) + 1) // 2
在最近的 CPython 中可能会更慢,其中 int
像旧的 long
一样实现.
简单的方法进行 3 次变量访问、1 次常量加载和 3 次整数运算。复杂的方法进行 2 次变量访问、3 次常量加载和 4 次整数运算。整数运算可能需要时间,这取决于所涉及数字的大小。函数局部变量的变量访问不涉及“查找”。
如果您真的对速度感到绝望,请进行基准测试。否则,KISS。
关于python - 整数除法四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950372/