各位大虾,本人刚接触VB6.0 ,不知道带小数的十进制数如何转换为二进制,请提供代码以代学习,谢谢!

解决方案 »

  1.   

    手上没有VB,用C#写一个,尽量贴近VB语法。double d = 123.456;
    string bin = "";
    int d1 = (int)d;
    while (d1 > 0)
    {
        bin = (d1 % 2 == 1 ? "1" : "0") + bin;
        d1 = d1 / 2;
    }
    double d2 = d - (int)d;
    bin = bin + ".";
    double x = 0.5;
    for (int i = 0; i < 10; i++)
    {
        bin = bin + (d2 >= x ? "1" : "0");
        if (d2 >= x)
            d2 = d2 - x;
        x = x / 2.0;
    }
    Console.WriteLine(bin);
      

  2.   

    帮你翻译下1楼代码:
    Private Sub Command1_Click()
        Dim d#, d1!, d2#, x!, i&, bin$
        d = 123.456
        d1 = Int(d)
        bin = ""
        Do While (d1 > 0)
            bin = IIf(d1 Mod 2 = 1, "1", "0") + bin
            d1 = d1 \ 2
        Loop
        d2 = d - Int(d)
        bin = bin + "."
        x = 0.5
        For i = 0 To 9
            bin = bin + IIf(d2 >= x, "1", "0")
            If d2 >= x Then
                d2 = d2 - x
            Else
                x = x / 2
            End If
        Next
        Debug.Print bin
    End Sub
    是否正确与1楼代码相关。
      

  3.   

    怎么算出来不对呀
    0.2887=.0100010001
    0.2887*2=0.5774     计0
    0.5774*2=1.1548       1
    0.1548*2=0.3096       0
    0.3096*2=0.6192       0
    0.6192*2=1.2384       1代码如下:
    Private Sub Command1_Click()
        Dim d#, d1!, d2#, x!, i&, bin$
            d = Val(Text1)
        d1 = Int(d)
        bin = ""
        Do While (d1 > 0)
            bin = IIf(d1 Mod 2 = 1, "1", "0") + bin
            d1 = d1 \ 2
        Loop
        d2 = d - Int(d)
        bin = bin + "."
        x = 0.5
        For i = 0 To 9
            bin = bin + IIf(d2 >= x, "1", "0")
            If d2 >= x Then
                d2 = d2 - x
            Else
                x = x / 2
            End If
        Next
        Text2 = bin
    End Sub
    请楼上重新分析一下
      

  4.   

    我的程序应该不会错
    结果是
    .0100100111
    Press any key to continue . . .
      

  5.   


    事实上,在计算机中,使用浮点数表示“带小数的数”。小数点就不需要了。只需要尾数、阶码和符号就可以表示任意数字。你可以按照标准,比如IEEE754来转换,也可以自己定义一种规则。
      

  6.   


    十进制数转为二进制的提法本身就很含混。所有的数,在机器内部,都是以二进制保存的。所谓十进制,实际上是系统显示时,“转换类型”用字符串表现给我们看的结果。也就相当于,数字到字符串的转换是系统内部完成的。我猜,楼主的意思是想将一个表示小数的字符串表达式转换成一个“数”。这牵涉到一个数据类型的问题。在 VB 中(当然也兼容于其他语言)常用的可以表示小数的数据类型有 3 种:1 单精度浮点数 Single
    2 双精度浮点数 Double
    3 货币数据类型 Currency这些数据类型是系统直接支持的,可以直接显示。浮点数的缺点是不能精确表示所有的十进制小数。其中 Double 的精度要高一些。Currency 是用整数来存储的,所以它精确表达十进制小数。但它只能表示 4 个十进制位小数。因为它实际上存储为十进制小数的 10000 倍。一些特殊场合,人们自定义某种数据格式来存储数字。例如,你可以用 2 个 Long 型整数分别表示一个数字的整数和小数部分。这样的格式是可以精确表示十进制小数的。但显示时,也需要你自己转换成字符串。当然,各种运算也需要你自己写函数。
      

  7.   


    手上没有VB,但是我想问题可能是
    bin = IIf(d1 Mod 2 = 1, "1", "0") + bin
    bin = bin + IIf(d2 >= x, "1", "0")
    VB是不是当作数来计算了,改成
    bin = IIf(d1 Mod 2 = 1, "1", "0") & bin
    bin = bin & IIf(d2 >= x, "1", "0")算了,这次不黑VB了,但是VB真的很垃圾。包括ls说的,在.NET中,用BitConverter一行代码就搞定了。
      

  8.   

    bin = bin + IIf(d2 >= x, "1", "0")
            If d2 >= x Then
                d2 = d2 - x
            Else
                x = x / 2
            End If
    这个错了

    bin = bin + IIf(d2 >= x, "1", "0")
    If d2 >= x Then d2 = d2 - x
    x = x / 2