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

Lui*_*rti 6 python legacy math integer rounding

当我偶然发现以下行时,我正在对一些遗留代码进行现代化改造:

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

它正在做的是利用Python的奇怪整数除法,将字符串的长度值(如果是奇数)舍入到它之前第一个偶数值.但整数除法即将在Python 3上改变,我需要改变这一行.起初我想到了这个:

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

但是那个叫rounded_val = (len(src_string) / 2) * 23次.然后我想到使用原始的想法,但使用地板除法运算符rounded_val = (len(src_string) / 2) * 2,并认为它可能不太相容,这样做,我应该使用rounded_val = (len(src_string) / 2) * 2(但后来我需要另一个导入rounded_val = (len(src_string) / 2) * 2).

我可能在思考这个问题,但在Python中这样做的最佳方法是什么?

PS:输出需要是整数.

Mar*_*ers 19

//如果您不喜欢依赖/整数操作数的Python 2 行为,请使用floor division :

rounded_val = (len(src_string) // 2) * 2
Run Code Online (Sandbox Code Playgroud)

  • @LuizBerti:当然,如果你希望你的代码在不同版本之间兼容,那么使用`//`而不是`/`绝对是可行的方法. (3认同)

ASh*_*lly 10

也许

rounded_val = len(src_string) & ~1
Run Code Online (Sandbox Code Playgroud)

这简单地清除了1s位,这正是您所需要的.仅适用于ints,但len应始终为整数.


Vla*_*lad 4

这个怎么样:

rounded_val = len(src_string) & (-2)
Run Code Online (Sandbox Code Playgroud)

尽管对于不熟悉二进制算术的人来说有时并不明显。

  • 尽管这些是等效的,但从维护的角度来看,我更愿意看到“~1”而不是“-2”。我直观地知道“Not 1”代表什么位模式,而我必须考虑“minus 2” (6认同)