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) * 2
3次.然后我想到使用原始的想法,但使用地板除法运算符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)
ASh*_*lly 10
也许
rounded_val = len(src_string) & ~1
Run Code Online (Sandbox Code Playgroud)
这简单地清除了1s位,这正是您所需要的.仅适用于int
s,但len应始终为整数.
这个怎么样:
rounded_val = len(src_string) & (-2)
Run Code Online (Sandbox Code Playgroud)
尽管对于不熟悉二进制算术的人来说有时并不明显。