关于小数的Python Float Precision

时间:2016-03-04 20:32:19

标签: python rounding

for Python

a = 1

for x in range(5):
    a += 0.1
    print(a)

结果如下:

1.1 1.2000000000000002 1.3000000000000003 1.4000000000000004 1.5000000000000004

我该如何处理?圆()函数的唯一方法是什么?我可以在设置值之前设置变量的精度吗?

4 个答案:

答案 0 :(得分:3)

  

我可以在设置值之前设置变量的精度吗?

使用decimal模块,与float()不同,它提供任意精度,并且可以精确地表示十进制数字:

pthread_cond_broadcast@@GLIBC_2.3.2

答案 1 :(得分:2)

您可以像这样格式化输出;

a=1
for x in range(5):
    a += 0.1
    print("{:.9f}".format(a) )

答案 2 :(得分:1)

假设你的问题只是显示数字,@ Jaco的回答就是这个工作。但是,如果您担心使用该变量并可能进行比较或分配字典键,我会说您必须坚持使用round()。例如,这不起作用:

a = 1
for x in range(5):
    a += 0.1
    print('%.1f' % a)
    if a == 1.3:
        break

1.1
1.2
1.3
1.4
1.5

你必须这样做:

a = 1
for x in range(5):
    a += 0.1
    print('%.1f' % a)
    if round(a, 1) == 1.3:
        break

1.1
1.2
1.3

答案 3 :(得分:1)

@Jaco正式建议格式化输出。但是,如果您希望控制变量的精度超出纯输出,您可能需要查看from decimal import Decimal a = 1 for x in range(3): a += Decimal('0.10') # use string, not float as argument # a += Decimal('0.1000') print(a) # a is now a Decimal, not a float > 1.10 # 1.1000 > 1.20 # 1.2000 > 1.30 # 1.3000 模块。

{{1}}