2013-07-02 24 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) –