簡體   English   中英

如何在python中轉換浮點數?

[英]How to convert floating point number in python?

如何將浮點數轉換為基數為16的數字,python中每32位FLP數為8個十六進制數?

例如: input = 1.2717441261e+20 output wanted : 3403244E

如果需要IEEE-754表示的字節值, struct模塊可以執行以下操作:

>>> import struct
>>> f = 1.2717441261e+20
>>> struct.pack('f', f)
'\xc9\x9c\xdc`'

這是字節的字符串版本,然后可以將其轉換為十六進制值的字符串表示形式:

>>> struct.pack('f', f).encode('hex')
'c99cdc60'

並且,如果您希望它作為十六進制整數,請將其解析為:

>>> s = struct.pack('f', f).encode('hex')
>>> int(s, 16)
3382500448

要將整數顯示為十六進制:

>>> hex(int(s, 16))
'0xc99cdc60'

請注意,這與您問題中的十六進制值不匹配 - 如果您的值是您想要的正確值,請更新問題以說明它是如何派生的。

有幾種可能的方法,但沒有一種方法可以達到您想要的效果。

  • 您可以將此浮點值編碼為其IEEE二進制表示。 這確實導致32位數(如果你用單精度進行)。 但無論我認為哪種字節順序,它都會導致不同的結果:

     import struct struct.pack("<f", 1.2717441261e+20).encode("hex") # -> 'c99cdc60' struct.pack(">f", 1.2717441261e+20).encode("hex") # -> '60dc9cc9' struct.unpack("<f", "3403244E".decode("hex")) # -> (687918336.0,) struct.unpack(">f", "3403244E".decode("hex")) # -> (1.2213533295835077e-07,) 
  • 由於另一個不符合結果,我將采取其他答案並將其包含在這里:

     float.hex(1.2717441261e+20) # -> '0x1.b939919e12808p+66' 

    3403244E無關,所以也許你想澄清一下你究竟是什么意思。

肯定還有其他方法可以進行此對話,但除非您指定所需的方法,否則沒有人可以幫助您。

您的預期輸出有問題:

import struct
input = 1.2717441261e+20
buf = struct.pack(">f", input)
print ''.join("%x" % ord(c) for c in struct.unpack(">4c", buf) )

輸出:

60dc9cc9

嘗試float.hex(input) 這應該將一個數字轉換為表示基數為16的數字的字符串,並且與hex()不同,它與浮點數一起使用。 該字符串將以0x ,並且在小數點后將包含13位數字,因此我無法幫助您處理8位數部分。

資料來源: http//docs.python.org/2/library/stdtypes.html#float.hex

如果input已經是浮點數,請嘗試使用float.hex(input)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM