将奇数舍入到偶数的最佳方法是什么?

6 投票
5 回答
4670 浏览
提问于 2025-04-17 20:39

我在重写一些旧代码时,遇到了以下内容:

rounded_val = (len(src_string) / 2) * 2

这段代码利用了整数除法的特性,如果字符串的长度是奇数,就把它向下取整到前一个偶数。不过在Python 3中,整数除法的规则要改变了,所以我需要修改这一行代码。

那么,有什么更好的方法来实现这个呢?

5 个回答

1

为什么不这样做:

rounded_val = len(src_string) - len(src_string) % 2
2

//这个运算符可能是你最好的选择,但你也可以使用divmod这个函数:

rounded_val = divmod(len(src_string), 2)[0] * 2
11

也许

rounded_val = len(src_string) & ~1

这段代码的作用是清除数字中最右边的1位,这正是你需要的。这个方法只适用于int类型的数字,但len应该总是整数。

19

如果你不想依赖Python 2中整数运算时的/行为,可以使用//来进行取整除法:

rounded_val = (len(src_string) // 2) * 2
4

这样怎么样:

rounded_val = len(src_string) & (-2)

虽然对于不熟悉二进制运算的人来说,这有时候并不明显。

撰写回答