首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2013-01-11 
一个二进制转为十进制的问题将二进制转化为十进制Private Function BIN2DEC(ByVal Bin As String) As Lon

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

     
  '  将二进制转化为十进制
    
    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

热点排行