Python:错误地返回浮动

时间:2017-02-09 09:51:39

标签: 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

    return (xr,yr)

当我致电point_double((3,5))时,我的返回值为(0.7600000000000007, 0.8239999999999981),而不是正确的值(0.76,0.824)

在返回行之前添加print xr, yr会打印所需的结果,但将其更改为print (xr,yr)会打印不正确的值

有人可以向我解释为什么会发生这种情况,并帮助我克服这个问题,以便函数返回所需的值

1 个答案:

答案 0 :(得分:1)

好吧,它的两件事 - 首先是计算机无法很好地代表某些数字(如1/3),其次是“打印”如何操纵你的代码:

所以:

drawChart()

将产生:

google.visualization.events.addListener(chart, 'error', function (googleError) {
    google.visualization.errors.removeError(googleError.id);
});
google.visualization.events.addListener(dash, 'error', function (googleError) {
    google.visualization.errors.removeError(googleError.id);
});

你应该考虑打印这样的东西:

xr, yr = point_double((3,5))

print xr
print yr

print (xr,yr)

我很难在打印中找到关于它如何在打印件上调用0.76 0.824 (0.7600000000000007, 0.8239999999999981) 的确切参考,因为在2.7中它是内置的。通过使用%或string.format,您可以强制执行并控制浮动的呈现方式。

zero-piraeus注意到:

  

打印对象时,会调用其 str ()方法。该   元组(或任何其他内置集合)的 str ()方法为集合中的每个项调用 repr ()。

请注意,xr的实际值是更长,不准确的。

编辑:这是一个很好的指南(对于python 3)关于如何存储浮点和其他打印方式https://docs.python.org/3/tutorial/floatingpoint.html