EXCEL2007中最多可以转10位二进制的数,我想把40位的二进制转成十进制的数,有什么办法?

如题所述

以下代码试验通过可行:
❤我自己对VB这门语言也是一知半解,代码写得很蹩脚。
返回值只能设定为Double了,设定为Long的话您的40位二进制会溢出的。
Double可允许的最大数值范围要大很多。Double最大有效数值位数为16位。也就是说最大能准确无误地显示的整数为:999999999……(16个9)。比这个数更大的整数赋值给Double就只能显示为不精确的小数或者用科学计数法表示了。而这个数转换为2进制后是49位。也就是说下面这段代码最多只能转换49位二进制数。比这个更长的数转换的结果就不精确。您可以用Win7系统自带的计算器的程序员模式进行验证。
Function MyBinToDec(ByVal value As String) As Double
On Error GoTo Catch
Try:
Dim result As Double
Dim length As Integer
length = Len(value)
For Index = 1 To length
result = result + CByte(Mid(value, Index, 1)) * Application.WorksheetFunction.Power(2, length - Index)
Next
MyBinToDec = result
Exit Function
Catch:
MsgBox "由于以下原因转换没有成功!" & vbNewLine & Err.Description
End Function
❤希望对您有所帮助。追问

谢谢!可我要在EXCEL2007中完成,不能用VB

追答

❤以上的代码就是我在Excel2007中用VBA写的。
您只需要按Alt+F11组合键就会切换到VBA代码编写界面。
再点击插入菜单中的模块子菜单,插入模块。并把我上面的代码贴进去。
这时候您再按Alt+F11切回Excel的表格界面。此时就可以使用刚刚在模块中自定义的函数MyBinToDec了。跟您在Excel中使用系统中自带的BinToDec函数方法一样。
你按照我说的做法再实验一遍吧。

追问

非常谢谢,真的。厉害

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-15
=BIN2DEC(MID(A1,1,9))*512^3+BIN2DEC(MID(A1,10,9))*512^2+BIN2DEC(MID(A1,19,9))*512+BIN2DEC(MID(A1,28,9))

不过只能显示36位二进制数转十进制数;36位二进制放于A1格内,B1格输入此公式;连等号一起复制;以下是68719476735以下十进制转二进制数,且显示36位二进制数EXCEL2007公式;
=TEXT(DEC2BIN(MOD(INT(A1/512/512/512),512)),"000000000")&TEXT(DEC2BIN(MOD(INT(A1/512/512),512)),"000000000")&TEXT(DEC2BIN(MOD(INT(A1/512),512)),"000000000")&TEXT(DEC2BIN(MOD(A1,512)),"000000000")
这是68719476735以下的十进制数转36位二进制数公式;十进制数放于A1格内,B1格内输入此公式;也连等号一起复制;68719476735以上的十进制数不能用此公式;
以下是两个36位二进制数异或公式:(两个二进制数分别放于A1和B1格,C1格输入此公式)
=SUBSTITUTE(TEXT(MID(A1,1,15)+MID(B1,1,15),"000000000000000"),2,0)&SUBSTITUTE(TEXT(MID(A1,16,15)+MID(B1,16,15),"000000000000000"),2,0)&SUBSTITUTE(TEXT(MID(A1,31,6)+MID(B1,31,6),"000000"),2,0)
相似回答