【发布时间】:2016-06-18 17:55:19
【问题描述】:
a = 1
for x in range(5):
a += 0.1
print(a)
这是结果:
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
我该如何解决这个问题? round() 函数是唯一的方法吗?我可以在设置变量值之前设置变量的精度吗?
【问题讨论】:
a = 1
for x in range(5):
a += 0.1
print(a)
这是结果:
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
我该如何解决这个问题? round() 函数是唯一的方法吗?我可以在设置变量值之前设置变量的精度吗?
【问题讨论】:
你可以像这样格式化你的输出;
a=1
for x in range(5):
a += 0.1
print("{:.9f}".format(a) )
【讨论】:
假设您的问题只是显示数字,@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
【讨论】:
@Jaco 已正式建议格式化输出。但是,如果您想控制变量的精度而不是纯输出,您可能需要查看decimal 模块。
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
【讨论】:
Decimal() 的输入的好建议。不知何故,我错过了那个有用的功能。