有效地将十进制转换为整数,将小数转换为整数



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

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

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

使用divmod

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

使用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)

如果需要使用十进制类的属性来完成它,您可以将此函数用于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'))

十进制可以用元组(符号、数字、指数(创建,其中符号(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)

相关内容

  • 没有找到相关文章

最新更新