我有一个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)
会打印不正确的值
有人可以向我解释为什么会发生这种情况,并帮助我克服这个问题,以便函数返回所需的值
答案 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