在我的現實生活中,我將一個窗口小部件的大小乘以size_hint
,它可以是從0.
到1.
之間的任意值。假設小部件的最小尺寸是0
,最大尺寸是10,000
,我應該在哪個數字上出現錯誤,當我乘以size * size_hint
?確定一個浮點數有多少個十進制數是精確的
例如*上0.1
上..
>>> from decimal import Decimal
>>> Decimal.from_float(.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
# ^
# |_ here
..第十八十進制數字發生錯誤。
在另一方面,下面的錯誤在14日小數出現
>>> 1001*.2
200.20000000000002
問題:
- 有沒有一種方法,以確定在哪個確切十進制數會出現錯誤?
- Python 2和Python 3有區別嗎?
使用小數點而不是浮點數不是一個選項,並且size
和size_hint
都由用戶提供。
* 我曾經因爲>>> 0.1
Fraction
顯示爲..在控制檯0.1
,但我認爲這是關係到它的打印方式,而不是它是如何存儲。
第十五位是保證正確任何單一的十進制數的最後一個。但是,這些錯誤會累積下來。然而,如果你的數字是2的負冪,它可以更精確... –
@AnttiHaapala你確定嗎?在'1001 * .2'的情況下,最後一個正確的數字是第13位。此外,'size_hint'由用戶提供,因此2的冪不是一個選項。 –
@Fermiparadox最後一位數字「2」是* 17th *有效數字。 –