繁体   English   中英

Python中如何将定点数转换为十进制数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM