如何修复python int casting错误?

时间:2017-11-10 20:05:48

标签: python casting

我正在尝试Project Euler problem 484。我正处于问题的开始阶段,我只是在搜索数字中的模式。

问题要求我找到一个"算术导数"。例如,要找到60的算术导数:

  

60 = 2 ^ 2 * 3 ^ 1 * 5 ^ 1

     

60' =(2/2 + 1/3 + 1/5)* 60 = 92

我利用内置的primefac算法,并为算术导数创建了一种方法。这是我的代码:

import primefac

def ad(n):
  ans = 0
  for i in set(primefac.primefac(n)):
    ans += 1.0*list(primefac.primefac(n)).count(i)/i
  return n*ans

print ad(30) ,  31.0 // PRINTS 31.0 31.0
print int(ad(30))    // PRINTS 30
print ad(30) == 31.0 // PRINTS False

Python将31.0作为int转换为30.这是浮点错误吗?更令人困惑的是ad(30)打印31.0但在相互评估时返回False。

1 个答案:

答案 0 :(得分:2)

是的,这是一个浮点问题。有一个简单的解决方法,但是......因为n总是按照定义可以被i整除,所以你可以完全删除浮点数学:

def ad(n):
    ans = 0
    for i in set(primefac.primefac(n)):
        ans += n * list(primefac.primefac(n)).count(i) // i
    return ans