python列表中的浮点问题

时间:2016-11-03 09:20:31

标签: python python-2.7 floating-point

我正在写一段测试代码,它们互相添加两个浮点。我可以获得准确性结果,但是当我将结果插入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]]

1 个答案:

答案 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))

并获得相同的结果。