爲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