Python 使用int()进行强制转换会将16.0变为15

Python 使用int()进行强制转换会将16.0变为15,python,casting,int,Python,Casting,Int,所以当我试图将浮点数转换成整数时,我遇到了一个奇怪的问题。我的代码当前如下所示: from math import gcd def dostuff(n,m): L = np.sqrt(n**2+m**2+n*m) dR = gcd(2*m+n,2*n+m) atoms=4*L**2/dR print(atoms) atoms = int(atoms) print(atoms) 当我以n=4和m=4运行此代码时,第一次打印返回16.0,而第二次打

所以当我试图将浮点数转换成整数时,我遇到了一个奇怪的问题。我的代码当前如下所示:

from math import gcd 
def dostuff(n,m):
    L = np.sqrt(n**2+m**2+n*m)
    dR = gcd(2*m+n,2*n+m)
    atoms=4*L**2/dR
    print(atoms)
    atoms = int(atoms)
    print(atoms)

当我以n=4和m=4运行此代码时,第一次打印返回16.0,而第二次打印返回15。原因是什么?我能做些什么来让第二个返回16吗?

你试过圆函数吗? 四舍五入(原子)它将四舍五入到最接近的整数5.6将是6,5.4将是5
如果你想上去,用ceil(原子)或者floor(原子)。希望这对你有帮助

您的数字只比实际的
16.0
低一小部分,刚好可以在打印时四舍五入,但在截断时会有所不同。你永远不能期望浮动是精确的。将数字四舍五入将是直接问题的答案,但我们不知道这是否通常是您算法的正确答案。检查一下,因为我得到了
15.999999998
15
,这是预期的,将浮点转换为int将给出数字的下限这是一个基本的浮点精度问题。它的核心是
np.sqrt(48)**2不等于
48
,它非常小。