使用十进制数字固定浮点精度

问题描述 投票:2回答:4
a = 1

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

这是结果:

1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004

我该如何解决? round()功能是唯一的方法吗?可以在设置变量值之前设置其精度吗?

python rounding
4个回答
4
投票

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

使用decimal模块,与decimal不同,该模块提供任意精度并可以精确表示十进制数字:

float()

2
投票

您可以这样格式化输出;

float()

1
投票

假设您的问题只是显示数字,@ Jaco的答案就可以了。但是,如果您担心使用该变量并可能进行比较或分配给字典键,那么我想您必须坚持round()。例如,这行不通:

>>> from decimal import Decimal, getcontext
>>> 
>>> getcontext().prec = 5
>>> 
>>> a = Decimal(1)
>>> 
>>> for x in range(5):
...     a += Decimal(0.1)
...     print(a)
... 
1.1000
1.2000
1.3000
1.4000
1.5000

您必须这样做:

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

1
投票

@ Jaco已适当建议格式化输出。但是,如果您希望控制变量的精度而不是纯输出,则可能需要查看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
© www.soinside.com 2019 - 2024. All rights reserved.