我有一个包含此值的单元格:
0x00006cd2c0306953
我想将其转换为数字。
我试过了:
=HEX2DEC(C8)
C8
包含我的十六进制值的单元格在哪里?
我收到一个#NUM错误。
我究竟做错了什么?
我有一个包含此值的单元格:
0x00006cd2c0306953
我想将其转换为数字。
我试过了:
=HEX2DEC(C8)
C8
包含我的十六进制值的单元格在哪里?
我收到一个#NUM错误。
我究竟做错了什么?
Answers:
您可以简单地使用:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
给你0x
字符串的长度。排除的长度0x
,剩下的字符串是十六进制数字。使用Excel函数获取dec。
HEX2DEC
最多接受十个十六进制数字。问题中的字符串0x00006cd2c0306953
长18个字符。您的解决方案评估RIGHT(A1,(LEN(A1)-2))
;18-2是16,所以RIGHT(…)
返回00006cd2c0306953
,这是16个数字长。即使您去除前导零,您也有12位数字,这仍然太多了。如果您可以使用它,请描述您的配置。(即,您使用的是哪个版本的Excel?您是否做了任何棘手的操作才能使其正常工作?)
如TwiterZX所示,Hex2Dec
的输入限制为10个字符,并且6cd2c0306953
为12个字符。所以这行不通,但让我们为此使用自己的功能。使用VBA,添加模块并使用以下代码(可能需要根据需要进行调整)
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
在Excel中,假设单元格A1包含0x00006cd2c0306953
,则A2的公式=HexadecimalToDecimal(A1)
将得出1.19652E+14
。将列格式化为小数点后零位的数字,结果将为119652423330131
。
HEX2DEC限制为10个字符,但这并不意味着我们不能使用它。只需多次使用它,一次即可转换10个字符,并为每次使用应用2的适当幂。
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[免责声明:目前未经测试]
稍后:我现在正在使用电子表格,可以进行测试。将MID中的3,5更改为3,6。嗯..仍然不正确。
事实证明,HEX2DEC正在处理带符号的十六进制值,因此第一个项最终为负数。不知道为什么,但是这是固定版本,它添加了2 ^ 40(或16 ^ 10,因为我们使用的是十六进制)来修复:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
但是,这仅在RIGHT(C8,10)恰好为负数时才有效。这是我的一般解决方案:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
哎呀
此功能已更改,请尝试使用
=HEXDEC(C8)
所以十六进制和DEC之间没有2
,
或;
在这里