比较Python中的“相似”数字

时间:2011-07-25 15:38:08

标签: python math rounding

为了同步我的iPod和我的本地音乐存储库,我使用其元数据为每个音轨创建了一个唯一键。独特的轨道由轨道的以下元数据字段组成: 艺术家,专辑,曲目编号,持续时间。 iPod以毫秒为单位保存曲目的持续时间,但我的本地存储库会在几秒钟内保存它。例如:iPod上的437590毫秒是我本地存储库中的438秒。

当我将ipod的音轨持续时间除以1000时,我得到437.我尝试使用round(),但round (b.tracklen/1000)打印437

如果没有匹配但是这是一个糟糕的解决方案,我可以通过检查math.ceil()math.floor()获取iPod持续时间来解决这个问题。

解决此问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

当您除以1000而不是1000.0

时,round来电显示错误的结果
>>> round(437590/1000.0)
438.0

答案 1 :(得分:2)

您正在体验Python 2的整数除法。当你划分两个整数时,Python(以及许多其他语言)会丢弃其余的整数。正如Dogbert指出的那样,你想要除以浮点而不是整数。

答案 2 :(得分:0)

舍入整数除法的结果非常简单:(n+(d/2))/d。在你的情况下:

def RoundedDivide(value, divisor):
    return (value + (divisor/2)) / divisor

>>> RoundedDivide(437590, 1000)
438

答案 3 :(得分:-2)

老实说,我认为你已经把它钉在了地板和ceil电话上,但为了这么简单,你可能想做一下((ipodtime / 1000)+1)== localrepostime来检查相等性,因为ipod时间好像是向下舍入的无论如何。