如何将Python中的定点数转为小数?

How to Convert Fixed Point Number to Decimal Number in Python?

如何将带符号的 64.64 位定点整数转换为 python 中的 decimal 数字?

例如整数1844674407370955161600是一个有符号的64.64位定点数,表示十进制数+100.00,我的理解是python float没有足够的位数(只有18位)来表示小数部分,因此我选择 decimal 类型。

也许可以提供将 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 fixed-point 类型:

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