关于vb循环次数的问题?急

来源:百度知道 编辑:UC知道 时间:2024/05/09 05:16:49
Private Sub Form_Click()
For i = 1 To 2 Step 0.1
Print "vb"
Next i
End Sub
电脑执行后发现运行10次,可是根据循环次数的公式int((终值-初值)/步长+1)却是11次,有哪位高手可以帮我解决一下?到底是几次?为什么?我是一名老师,学生快考试了,很急!
For i = 0 To 1 Step 0.1 ---循环11次
For i = 1 To 2 Step 0.1 ---10次!
For i = 2 To 3 Step 0.1 ---10次
For i = 3 To 4 Step 0.1 ---10次!
For i = 4 To 5 Step 0.1 ---循环11次
为什么?

●误差造成:

请看这段程序:
Private Sub Form_Click()
Dim i As Single
For i = 0.2 To 1 Step 0.1
Print i
Next
End Sub

输出结果是:
.2
.3
.4
.5
.6
.7
.8000001
.9000001

你可以把程序放入VB调试一下,最后2行也这样。 而且也少执行了一次 。
●这个程序是有解决方法的:代码改成 Dim i As Double 就对了。

●这是因为计算机在计算Single的时候是按二进制移位进行的,也就是说,计算机本身的精度有一定的偏差,在这种情况下,后面不够0.1了,所以就不循环了

**************
●你的程序虽然没有定义i为single,但执行一次循环,变量i变成1.1时,VB就自动把i转换成了single类型。

●最后,你可以给学生演示这几种,帮助他们明白:
***********************
还是用你的程序吧:
For i = 0 To 1 Step 0.1 ---循环11次
For i = 1 To 2 Step 0.1 ---误差!少1次!
For i = 2 To 3 Step 0.1 ---循环11次
For i = 3 To 4 Step 0.1 ---误差!少1次!
... ...

是不是很奇怪呢?我刚才写回复的时候也很奇怪:当初值是偶数,次数正确,初值为奇数,就会少一次!

●所以你可以这样跟学生说,当循环到第10次的时候,i变成1.9000001,第11次时i变成2.0000001 了!!!
2.0000001>2,所以最后一次循环没被执行