[英]How to Convert Fixed Point Number to Decimal Number in Python?
如何将带符号的 64.64 位定点 integer 转换为 python 中的decimal
数?
例如 integer 1844674407370955161600 是带符号的 64.64 位定点,表示十进制数 +100.00,我的理解是float
类型的位数不足(我只选择了 18 位decimal
)来表示小数部分。
也许可以提供一个更通用的 function 用于将Qm.n
转换为decimal
。
您可以使用decimal.Decimal
并除以固定点,如下所示:
>>> import decimal
>>> decimal.Decimal(1844674407370955161600) / (1 << 64)
Decimal('100')
请记住,您至少需要 39 位数字才能完全精确。 确保在开始转换之前设置它:
>>> decimal.getcontext().prec = 39
另一种选择是使用分数,它也将提供完整的精度:
>>> import fractions
>>> fractions.Fraction(1844674407370955161600, 1<<64)
Fraction(100, 1)
一般来说,您可以使用fxpmath模块来转换Qm.n
定点类型:
from fxpmath import Fxp
x_fxp = Fxp(1844674407370955161600, dtype='Q64.64', raw=True) # a fixed-point object
x_float = x_fxp.get_val() # or just x_fxp()
100.0
如果您想要更短的代码:
x = Fxp(1844674407370955161600, dtype='Q64.64', raw=True)()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.