在Python中比较“相似”的数字
为了让我的iPod和本地音乐库同步,我为每首歌创建了一个独特的标识,这个标识是根据歌曲的一些信息生成的。每首歌的独特标识包括以下几个信息字段:艺术家、专辑、曲目编号和时长。iPod上保存的歌曲时长是以毫秒为单位的,而我本地的音乐库则是以秒为单位保存的。举个例子:在iPod上显示的437590毫秒,在我的本地音乐库中就是438秒。
当我把iPod的歌曲时长除以1000时,得到的是437。我试着用round()
函数,但round(b.tracklen/1000)
的结果还是437
。
如果找不到匹配,我可以通过检查math.ceil()
和math.floor()
来解决这个问题,但这样的方法并不好。
那这个问题的最佳解决方案是什么呢?
4 个回答
0
整数除法的结果四舍五入其实很简单:你可以用这个公式 (n+(d/2))/d
。在你的例子中:
def RoundedDivide(value, divisor):
return (value + (divisor/2)) / divisor
>>> RoundedDivide(437590, 1000)
438
2
你遇到了Python 2中的一个叫做整数除法的问题。当你用两个整数相除时,Python(还有很多其他编程语言)会把余数给丢掉。为了得到更准确的结果,你应该用浮点数(小数)来进行除法,而不是用整数,正如Dogbert所提到的那样。
6
你在使用round
函数时得到的结果不对,因为你是用1000来除,而不是用1000.0。
>>> round(437590/1000.0)
438.0