读书人

一个二进制转为十进制的有关问题

发布时间: 2013-01-11 11:57:35 作者: rapoo

一个二进制转为十进制的问题

     
' 将二进制转化为十进制

Private Function BIN2DEC(ByVal Bin As String) As Long
Dim ra As Double = 0
For i As Integer = 1 To Len(Bin)
ra = ra * 2 + Val(Mid(Bin, i, 1))
Next i
If ra > 9223372036854775807 Then
Return 0
Else
Return CLng(ra)
End If

End Function


请大家帮忙看看上面的代码,当输入63个“1”时,在“ Return CLng(ra)”这里会报错,奇了怪了,63个“1”转为十进制不是9223372036854775807吗?
[解决办法]
'将二进制转化为十进制     
Private Function BIN2DEC(ByVal Bin As String) As Long
return Convert.ToUInt64(Bin,2)
End Function

[解决办法]

Sub Main()
Console.WriteLine("请输入一个二进制数")
Console.WriteLine(bin2int(Console.ReadLine()))
Console.ReadKey()
End Sub

Function bin2int(ByVal bin As String) As Integer
Dim i As Long
For i = 1 To bin.Length
bin2int = bin2int * 2 + Val(Mid(bin, i, 1))
Next i
End Function


[解决办法]
不要用Val 与 double ,用 long 或者decimal ,浮点运算会有时候不准的,(省略了后面一位或进多了一位的)

long保存 64 位(8 字节)有符号整数,值的范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807


Private Function BIN2DEC(ByVal Bin As String) As Long
Dim ra As Long = 0
For i As Integer = 1 To Len(Bin)
ra = ra * 2 + CLng(Mid(Bin, i, 1))
Next i
If ra > 9223372036854775807 Then
Return 0
Else
Return CLng(ra)
End If

End Function

读书人网 >VB Dotnet

热点推荐