为PythonPython的float精度约小数
a = 1
for x in range(5):
a += 0.1
print(a)
这是结果:
1.1 1.2000000000000002 1.3000000000000003 1.4000000000000004 1.5000000000000004
我怎样才能用这个处理? round()函数的唯一方法是什么?我可以在设置值之前设置变量的精度吗?
为PythonPython的float精度约小数
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()'的输入。不知何故,我错过了有用的功能。 – Chris
@Chris读你的答案,我不得不承认,我不知道你可以使用get_context设置一般精度:D我只使用上下文来设置一般的舍入行为。 – schwobaseggl