Python 2.7 Python:返回的浮点值不正确
我有一个Python函数,如下所示:Python 2.7 Python:返回的浮点值不正确,python-2.7,Python 2.7,我有一个Python函数,如下所示: def point_double((xp,yp)): s=(3.0*pow(xp,2)-1)/(2.0*yp)#s=2.6 xr=pow(s,2)-(2*xp)#xr=0.76 yr=s*(xp-xr)-yp#yr=0.824 回报率(xr,年) 当我调用point\u double((3,5))时,我得到的返回值是(0.7600000000000007,0.82399999981),而不是正确的(0.76,0.824) 在返回行打印所需结果之前添加pri
def point_double((xp,yp)):
s=(3.0*pow(xp,2)-1)/(2.0*yp)#s=2.6
xr=pow(s,2)-(2*xp)#xr=0.76
yr=s*(xp-xr)-yp#yr=0.824
回报率(xr,年)
当我调用point\u double((3,5))
时,我得到的返回值是(0.7600000000000007,0.82399999981)
,而不是正确的(0.76,0.824)
在返回行打印所需结果之前添加print xr,yr
,但将其更改为print(xr,yr)
打印不正确的值
有人能给我解释一下为什么会发生这种情况,并帮助我克服这种情况,使函数返回所需的值吗?好的,有两件事-首先是计算机不能很好地表示某些数字(如1/3),其次是“打印”是如何操作代码的: 因此: 这将产生:
0.76
0.824
(0.7600000000000007, 0.8239999999999981)
你应该考虑这样打印一点:
print (" x: %s y: %s" % (xr, yr))
我很难在print中找到它在print中如何调用str()
,因为在2.7中它是一个内置的。通过使用%或string.format,可以有效地强制执行和控制浮点的呈现方式
注意到:
打印对象时,将调用其str()方法。这个 元组(或任何其他内置集合)的str()方法为集合中的每个项调用repr() 请注意,xr的实际值较长且不准确
编辑:这是一个很好的指南(适用于python 3),介绍如何存储浮点以及打印浮点的其他方法,或者xp**2代替浮点pow也有帮助。浮点错误部分有道理,但是任何人都可以解释为什么
print xr
返回0.76
,但是return语句给出xr=0.7600000007
不是返回,而是打印(即,您的代码是“ok”)。从我下面的回答中可以看出:基本上,如果你调用它,那么显式地打印xr和yr,它们将被缩短,而如果你打印元组,它们将变长。当你打印一个对象时,它的\uu str\uu()
方法被调用。元组(或任何其他内置集合)的\uu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
方法为集合中的每个项调用。令人沮丧,但很有帮助!
print (" x: %s y: %s" % (xr, yr))