在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)