我正在写一段测试代码,它们互相添加两个浮点。我可以获得准确性结果,但是当我将结果插入python列表时会出现额外的点数,我不知道是什么导致了这种后果。请给我一个提示!
我的代码:
center = [120.688281,30.500036]
coupon_list = []
for i in range(5):
seed_x = random.randint(1,100)
print 'seed_x:'
print seed_x
random.seed(seed_x)
rand_x = random.randrange(100,500,20)/float(100000)
seed_y = random.randint(1,100)
print 'seed_y:'
print seed_y
random.seed(seed_y)
rand_y = random.randrange(100,500,20)/float(100000)
print 'rand_x:'
print rand_x
print 'rand_y:'
print rand_y
print 'float convert:'
x = center[0]+ rand_x
y = center[1] + rand_y
print 'x:'
print x
print 'y:'
print y
coupon = []
coupon.append(x)
coupon.append(y)
print 'coupon:'
print coupon
coupon_list.append(coupon)
print coupon_list
我的结果:
seed_x:
22
seed_y:
15
rand_x:
0.0048
rand_y:
0.0048
float convert:
x:
120.693081
y:
30.504836
coupon:
[120.693081, 30.504836]
seed_x:
2
seed_y:
95
rand_x:
0.0048
rand_y:
0.004
float convert:
x:
120.693081
y:
30.504036
coupon:
[120.693081, 30.504036000000003]
seed_x:
52
seed_y:
6
rand_x:
0.0048
rand_y:
0.004
float convert:
x:
120.693081
y:
30.504036
coupon:
[120.693081, 30.504036000000003]
seed_x:
83
seed_y:
86
rand_x:
0.0028
rand_y:
0.004
float convert:
x:
120.691081
y:
30.504036
coupon:
[120.691081, 30.504036000000003]
seed_x:
4
seed_y:
11
rand_x:
0.0018
rand_y:
0.0028
float convert:
x:
120.690081
y:
30.502836
coupon:
[120.690081, 30.502836000000002]
[[120.693081, 30.504836], [120.693081, 30.504036000000003], [120.693081, 30.504036000000003], [120.691081, 30.504036000000003], [120.690081, 30.502836000000002]]
答案 0 :(得分:2)
如果你可以决定你需要多少精度,你总是可以使用这样的东西。
coupon.append(float(format(x,'.6f')))
coupon.append(float(format(y,'.6f')))
在这种情况下,小数点后面会有6位数字 e.g。
>>> a=30.504036000000003
>>> print a
30.504036
>>> repr(a)
'30.504036000000003'
>>> coupon=[]
>>> coupon.append(a)
>>> coupon
[30.504036000000003]
>>> coupon.append(float(format(a,'.6f')))
>>> coupon
[30.504036000000003, 30.504036]
>>> coupon[0]+coupon[1]
61.008072
>>> type(coupon[0])
<type 'float'>
>>> type(coupon[1])
<type 'float'>
编辑:或正如马克在评论中指出的那样,您可以使用:
coupon.append(round(x,6))
coupon.append(round(y,6))
并获得相同的结果。