同事们,下午好。在 Visual Basic 中编写宏时,我遇到了一个奇怪的 For 循环问题。
例如,我有这个代码:
Sub Test_for()
Dim cell As Range
Dim counter As Integer
Set cell = Range("A1")
'Первый цикл For
counter = 0
For i = 0 To 1 Step 0.1
cell.Offset(counter, 0).Value = i
counter = counter + 1
Next i
'Второй цикл For
counter = 0
For j = 0 To 2 Step 0.1
cell.Offset(counter, 1).Value = j
counter = counter + 1
Next j
'Третий цикл For
counter = 0
For k = 0.1 To 2.1 Step 0.1
cell.Offset(counter, 1).Value = k
counter = counter + 1
Next k
End Sub
所以对于第一个周期,我有一个从 0 到 1 形式的输出(一切都是正确的),但是!对于第二个循环,我的输出从 0 到 1.9(但应该最多为 2)。对于第三个循环,输出从 0.1 到 2(但应该高达 2.1)!
了解VB细微差别的同事,告诉我我做错了什么,抽什么手册。对我来说,这种循环行为是不可理解的。
浮点数的精度有限。在最后一次迭代中,循环变量的值不完全是 2.0,而是例如 2.000000000001,并且不再落入循环的上限,设置为 2。
在这里使用类型是最正确的
decimal
,它在十进制系统中精确地表示小数,为此,使用D
数字后缀:decimal
但是,如果由于某种原因该类型不可用,您可以更加手工地进行操作: