手上没有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);
帮你翻译下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楼代码相关。
怎么算出来不对呀 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 请楼上重新分析一下
我的程序应该不会错 结果是 .0100100111 Press any key to continue . . .
手上没有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一行代码就搞定了。
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
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);
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楼代码相关。
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
请楼上重新分析一下
结果是
.0100100111
Press any key to continue . . .
事实上,在计算机中,使用浮点数表示“带小数的数”。小数点就不需要了。只需要尾数、阶码和符号就可以表示任意数字。你可以按照标准,比如IEEE754来转换,也可以自己定义一种规则。
十进制数转为二进制的提法本身就很含混。所有的数,在机器内部,都是以二进制保存的。所谓十进制,实际上是系统显示时,“转换类型”用字符串表现给我们看的结果。也就相当于,数字到字符串的转换是系统内部完成的。我猜,楼主的意思是想将一个表示小数的字符串表达式转换成一个“数”。这牵涉到一个数据类型的问题。在 VB 中(当然也兼容于其他语言)常用的可以表示小数的数据类型有 3 种:1 单精度浮点数 Single
2 双精度浮点数 Double
3 货币数据类型 Currency这些数据类型是系统直接支持的,可以直接显示。浮点数的缺点是不能精确表示所有的十进制小数。其中 Double 的精度要高一些。Currency 是用整数来存储的,所以它精确表达十进制小数。但它只能表示 4 个十进制位小数。因为它实际上存储为十进制小数的 10000 倍。一些特殊场合,人们自定义某种数据格式来存储数字。例如,你可以用 2 个 Long 型整数分别表示一个数字的整数和小数部分。这样的格式是可以精确表示十进制小数的。但显示时,也需要你自己转换成字符串。当然,各种运算也需要你自己写函数。
手上没有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一行代码就搞定了。
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