在Python中比较“相似”的数字

1 投票
4 回答
1619 浏览
提问于 2025-04-16 22:13

为了让我的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

撰写回答