python - 整数除法四舍五入

标签 python rounding integer-division

是否有一种简单的 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/

相关文章:

python - 根据数据中的列数动态生成箱线图

python - 使用列表打印有向图中的所有路径

java - 对数字(float)进行舍入以将其存储为 int,而不使用像 math.round() 这样的 math.packe

python - 为什么在 Python 中 -103/100 == -2 但 103/100 == 1?

python - 找不到函数名

smarty - Smarty中的回合显示错误结果

php - 当 PHP 精度设置为 18+ 时 round() 中断

c# - 模运算符的反义词?

math - 使用整数除法时,用 "a/(b*c)"替换 "a/b/c"是否安全?

python - 使用 python 从 .csv 文件读取边缘到 igraph