2013-07-02 22 views
3

什麼是獲得python的整數部分和小數部分的最有效方法(python 3)DecimalPython十進制modf

這就是我現在所擁有的:

from decimal import * 
>>> divmod(Decimal('1.0000000000000003')*7,Decimal(1)) 
(Decimal('7'), Decimal('2.1E-15')) 

任何建議都歡迎。

+0

聽起來合理的給我。 –

回答

1

您還可以使用math.modfDocumentation

>>> 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 
+0

當然是。任何在'float'上操作的東西都比在decimal.Decimal上操作的任何東西都快。然而,問題是關於'decimal.Decimal',而不是'float'。 –

+0

@ IgnacioVazquez-Abrams對於用戶來說,它真的很重要嗎?如果float更快,那麼爲什麼不把string轉換爲float。除非轉換成本更高。 – enginefree

+3

[因爲。](https://www.google.com/search?q=float+inaccuracy) –