有效地将Decimal转换为整数和小数作为整数

时间:2018-09-23 06:17:38

标签: python

将十进制转换为一对整数以在python中获得整数和分数的最佳方法是什么? 说的最好-我的意思是有效,准确和使用数据类型的底层结构。 例如:

d = Decimal('1536310893.687185000')
whole, fractional = some_func(d)
print(whole)
1536310893
print(fractional)
687185000

我相信有比仅分割字符串表示法更有效的方法:) 我还认为Decimal作为一对整数存储在内存中,问题是如何获取它们? :)

4 个答案:

答案 0 :(得分:2)

使用divmod

>>> divmod(d, 1)
(Decimal('1536310893'), Decimal('0.687185000'))

答案 1 :(得分:1)

尝试使用split

d = Decimal('1536310893.687185000')
whole, fractional = map(float,str(d).split('.'))
print(whole)
print(fractional)

输出:

1536310893
687185000

更好的math.modf

import math
whole, fractional = math.modf(d)

答案 2 :(得分:1)

如果需要使用Decimal类的属性来完成此操作,则可以将此函数用于some_func()

from decimal import *

def whole_and_fractional_part(d):
    getcontext().rounding = ROUND_FLOOR
    return d.to_integral_exact(), d - d.to_integral_exact()

这给出了输出:

In [34]: whole, fractional
Out[34]: (Decimal('1536310893'), Decimal('0.687185'))

答案 3 :(得分:1)

可以使用元组(符号,数字,指数)创建小数,其中符号(正数为0,负数为1),数字元组和整数指数组成。 decimal.as_tuple()返回此表示形式。使用这些选项,我们可以编写以下内容:

def whole_frac_int(d):
    sign,digits,exp = d.normalize().as_tuple()
    return ( 
      int( decimal.Decimal( (sign,digits[:exp],0) ) ),
      int( decimal.Decimal( (sign,digits[exp:],0) ) )
    )

>>> whole_frac_int( decimal.Decimal('1536310893.687185000')
(1536310893, 687185)
相关问题