本帖最后由 香川群子 于 2014-11-18 10:09 编辑
楼主你要知道循环终止的原理:
当循环计数器的值 i 大于循环计数终点值 i2 时就立即停止。
因此实际循环计数器的最大值 t 应该是<=循环计数终点值 i2 ……所以你提出的现象是很正常的啦。
按如下代码测试:
- Sub test()
- Debug.Print fortest(1, 2.2, 0.1)
- Debug.Print fortest(1, 2.2, 0.2)
- Debug.Print fortest(1, 2.2, 0.01)
- End Sub
- Function fortest(i1, i2, s)
- For i = i1 To i2 Step s
- t = i
- Next
- fortest = vbCr & "Step: " & s & vbCr & "End i=t: " & t & vbCr & "Stop i>i2: " & i & vbCr & "i-i2 diff: " & i - i2
- End Function
复制代码即,固定循环计数起点 1、循环计数终点2.2时,而改变循环步长时,实际效果如下:
Step: 0.1
End i=t: 2.1000000000000008
Stop i>i2: 2.200000000000000888178419700125
i-i2 diff: 8.88178419700125E-16
Step: 0.2
End i=t: 2.199999999999999555810790140037 约等于 2.2
Stop i>i2: 2.4
i-i2 diff: 0.2
Step: 0.01
End i=t: 2.1999999999999964472863211995 约等于 2.2
Stop i>i2: 2.21999999999999623
i-i2 diff: 9.99999999999623E-03
严格上说,步长0.2和步长0.01时,循环计数结果 i 也没有达到2.2,而是无限接近而已。
总之,是小数减法的浮点误差造成的结果。