【问题标题】:Casting using int() turns 16.0 to 15使用 int() 进行转换将 16.0 转换为 15
【发布时间】:2020-04-15 07:02:42
【问题描述】:

所以我在尝试将浮点数转换为整数时遇到了一个奇怪的问题。我的代码目前如下所示:

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 个?

【问题讨论】:

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

标签: python casting int


【解决方案1】:

你试过圆形功能吗? round(atoms) 它将四舍五入到最接近的整数 5.6 将是 6 和 5.4 将是 5 如果你想上去使用 ceil(atoms) 否则使用 floor(atoms)。希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2012-02-27
    • 2018-08-28
    相关资源
    最近更新 更多