python中浮点数的十六进制字符串表示

Posted

技术标签:

【中文标题】python中浮点数的十六进制字符串表示【英文标题】:Hexadecimal string representation to floating number in python 【发布时间】:2018-01-17 10:28:28 【问题描述】:

从python文档中说“十六进制字符串0x3.a7p10代表浮点数(3 + 10./16 + 7./16**2)* 2.0**10,或3740.0”所以:

>>> float.fromhex('0x3.a7p10')

3740.0

然后

>>> float.hex(3740.0)

'0x1.d380000000000p+11' (will give different presentation)

我的问题是如何使用上面的计算公式将 '0x1.d380000000000p+11' 转换为浮点数,以及为什么 classmethod float.hex 和 classmethod float.fromhex 给出不同的表示。

谢谢你……

【问题讨论】:

【参考方案1】:

'0x1.d380000000000p+11' 表示(1 + 13./16 + 3./16**2 + 8/16**3) * 2.0**11,等于3740.0。要转换此结果,您可以运行float.fromhex('0x1.d380000000000p+11'),它会再次返回3740.0

float.hex 给你一个规范化 表示,这意味着2**x 前面的因子在 1 和 2 之间。解释器所做的是移动二进制表示中的逗号增加一位:增加指数(从 10 到 11)和一半的因子(0x3.a7 / 2 = 0x1.d38)。

一般来说,在这个规范化表示中,前面的因子在1和基数之间。例如,如果您执行print(2234.2e-34),您将得到2.2342e-31。这里的主导因子在 1 到 10 之间,因为 e 对应于 10**x

【讨论】:

是转换结果是使用 float.fromhex 但我的问题是如何使用“第一个公式”进行转换 (3 + 10./16 + 7./16**2) * 2.0* *10,我还是不明白....谢谢 数字 13、3 和 8 是从哪里来的(除以 16 的数字)......? 好的,我知道 13、3 和 8 来自哪里...谢谢 嗨@WiraBhakti,如果这个答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

以上是关于python中浮点数的十六进制字符串表示的主要内容,如果未能解决你的问题,请参考以下文章

python中浮点数的处理

浮点数怎么表示精确度?

python语言学习7——数据类型和变量

c语言、浮点数怎么变成16进制

MODBUS RTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数

c语言如何让输出结果精确到两位小数