for Python
a = 1
for x in range(5):
a += 0.1
print(a)
结果如下:
1.1 1.2000000000000002 1.3000000000000003 1.4000000000000004 1.5000000000000004
我该如何处理?圆()函数的唯一方法是什么?我可以在设置值之前设置变量的精度吗?
答案 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}}