为什么打印返回的元组不同于按索引打印元组的成员?

2024-10-01 17:33:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了这个函数(见下文),它接受一些值并返回一个元组。如果我使用索引打印元组的值(例如元组[0]、元组[1]等),那么打印的值是正确的。但是如果我只是打印元组或打印函数,那么我会得到一些疯狂的值(有时)。在

代码如下:

import math

def getvector(x1,y1,length,angle):

    x1 = float(x1)
    y1 = float(y1)
    length = float(length)
    angle = float(angle)

    x2 = x1 + (length * math.cos(math.radians(angle)))
    y2 = y1 + (length * math.sin(math.radians(angle)))

    print "in getvector x2,y2 = (%f, %f)" % (x2,y2)

    return (x2,y2)


xy2 = getvector(0,0,4,270)
print "in main x2,y2 = (%f, %f)" % (xy2[0],xy2[1])
print getvector(0,0,4,270)
print "tuple =", xy2

结果是:

^{pr2}$

知道发生什么事了吗??当我直接打印元组时,为什么值不同?在


Tags: 函数inmathfloatlength元组printx1
2条回答

使用%f格式规范打印时,将显示7位有效数字的结果。打印元组本身不是-这就是为什么你得到-7.3。。。数字(非常小,接近于零)。在

下面是发生的事情:

当单独打印值时,使用的是格式字符串(%f),该字符串以浮点格式(即最多7个有效数字)打印数字。这部分是正确的。在

将值作为元组的一部分打印时,元组本身负责生成自己的字符串表示形式。当它创建值的字符串表示形式时,它不使用%f格式字符串;相反,它只是在对象上调用repr()。这将导致不格式化,只得到精确的数值,精确到小数点后14位。比较:

import math
>>> print "%f" % (0.0 + 4*math.cos(math.radians(270)))
-0.000000
>>> print repr(0.0 + 4*math.cos(math.radians(270)))
-7.3478807948841188e-16

相关问题 更多 >

    热门问题