如何将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)()
如何将带符号的 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)()