VB6.0 中带小数的十进制数如何转换为二进制

aqq886_88 2013-01-15 12:04:06
各位大虾,本人刚接触VB6.0 ,不知道带小数的十进制数如何转换为二进制,请提供代码以代学习,谢谢!
...全文
4018 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
aqq886_88 2013-01-17
  • 打赏
  • 举报
回复
谢谢版主,非常高兴认识你们
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
事实上二进制表示精度是很低的,大约小数点3位精度等于十进制保留1位的精度。 我的代码只算到小数点后10位,大致只有2~3位有效数字。 你要想更精确,可以加大循环 这是20位的 .01001001111010000011 大致等于1/4+1/32+1/256+1/512+1/1024+1/2048+1/8192+1/262144 0.288700104
WallITreeNewBee 2013-01-16
  • 打赏
  • 举报
回复
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
0.0100100111 =1/4+1/32+1/256+1/512+1/1024 =0.288085938
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
引用 8 楼 aqq886_88 的回复:
另外这个小数点可以转换成二进制代码吗?
事实上,在计算机中,使用浮点数表示“带小数的数”。小数点就不需要了。只需要尾数、阶码和符号就可以表示任意数字。你可以按照标准,比如IEEE754来转换,也可以自己定义一种规则。
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
我的程序应该不会错 结果是 .0100100111 Press any key to continue . . .
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
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
aqq886_88 2013-01-16
  • 打赏
  • 举报
回复
我再去试一下,谢谢各位回答
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
引用 4 楼 vbload 的回复:
帮你翻译下1楼代码: Visual Basic code?12345678910111213141516171819202122Private Sub Command1_Click() Dim d#, d1!, d2#, x!, i&, bin$ d = 123.456 d1 = Int(d) bin = "" Do While (……
手上没有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一行代码就搞定了。
of123 2013-01-16
  • 打赏
  • 举报
回复
十进制数转为二进制的提法本身就很含混。 所有的数,在机器内部,都是以二进制保存的。 所谓十进制,实际上是系统显示时,“转换类型”用字符串表现给我们看的结果。也就相当于,数字到字符串的转换是系统内部完成的。 我猜,楼主的意思是想将一个表示小数的字符串表达式转换成一个“数”。 这牵涉到一个数据类型的问题。 在 VB 中(当然也兼容于其他语言)常用的可以表示小数的数据类型有 3 种: 1 单精度浮点数 Single 2 双精度浮点数 Double 3 货币数据类型 Currency 这些数据类型是系统直接支持的,可以直接显示。 浮点数的缺点是不能精确表示所有的十进制小数。其中 Double 的精度要高一些。 Currency 是用整数来存储的,所以它精确表达十进制小数。但它只能表示 4 个十进制位小数。因为它实际上存储为十进制小数的 10000 倍。 一些特殊场合,人们自定义某种数据格式来存储数字。例如,你可以用 2 个 Long 型整数分别表示一个数字的整数和小数部分。这样的格式是可以精确表示十进制小数的。但显示时,也需要你自己转换成字符串。当然,各种运算也需要你自己写函数。
threenewbee 2013-01-15
  • 打赏
  • 举报
回复
手上没有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);
aqq886_88 2013-01-15
  • 打赏
  • 举报
回复
另外这个小数点可以转换成二进制代码吗?
aqq886_88 2013-01-15
  • 打赏
  • 举报
回复
怎么算出来不对呀 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 请楼上重新分析一下
aqq886_88 2013-01-15
  • 打赏
  • 举报
回复
非常感谢各位的回答
aqq886_88 2013-01-15
  • 打赏
  • 举报
回复
谢谢版主的回答
lliai 2013-01-15
  • 打赏
  • 举报
回复
在网上搜搜浮点数转换,就有了。
网络菜鸟00 2013-01-15
  • 打赏
  • 举报
回复
帮你翻译下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楼代码相关。
aqq886_88 2013-01-15
  • 打赏
  • 举报
回复
哪位大哥再用VB写一个

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧