什麼是獲得python的整數部分和小數部分的最有效方法(python 3)Decimal
?Python十進制modf
這就是我現在所擁有的:
from decimal import *
>>> divmod(Decimal('1.0000000000000003')*7,Decimal(1))
(Decimal('7'), Decimal('2.1E-15'))
任何建議都歡迎。
什麼是獲得python的整數部分和小數部分的最有效方法(python 3)Decimal
?Python十進制modf
這就是我現在所擁有的:
from decimal import *
>>> divmod(Decimal('1.0000000000000003')*7,Decimal(1))
(Decimal('7'), Decimal('2.1E-15'))
任何建議都歡迎。
您還可以使用math.modf
(Documentation)
>>> math.modf(1.0000000000000003)
(2.220446049250313e-16, 1.0)
python2.7 -m timeit -s 'import math' 'math.modf(1.0000000000000003)'
1000000 loops, best of 3: 0.191 usec per loop
的divmod
方法:
python2.7 -m timeit -s 'import decimal' 'divmod(decimal.Decimal(1.0000000000000003),decimal.Decimal(1))'
1000 loops, best of 3: 39.8 usec per loop
我認爲更有效的是math.modf
我想更更簡單和有效的方法是隻將字符串轉換爲整數:
>>>a = int(Decimal('1.0000000000000003'))
1
>>>python2.7 -m timeit -s 'import decimal' 'int(decimal.Decimal('1.0000000000000003'))'
10000 loops, best of 3: 11.2 usec per loop
要獲得小數部分:
>>>int(Decimal('1.0000000000000003')) - a
3E-16
當然是。任何在'float'上操作的東西都比在decimal.Decimal上操作的任何東西都快。然而,問題是關於'decimal.Decimal',而不是'float'。 –
@ IgnacioVazquez-Abrams對於用戶來說,它真的很重要嗎?如果float更快,那麼爲什麼不把string轉換爲float。除非轉換成本更高。 – enginefree
[因爲。](https://www.google.com/search?q=float+inaccuracy) –
聽起來合理的給我。 –