什么是获得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) –
听起来合理的给我。 –