循环通过十进制序列

时间:2011-10-03 19:45:12

标签: excel vba

我在VBA中为excel编写一个循环,我想循环遍历一个十进制数字序列,而不是整数。

例如:

For i = 1 To 10
    'Do something
Next i

但是我想增加0.5(或者可能是5,或者除了1以外的任何数字),而不是增加1。

3 个答案:

答案 0 :(得分:8)

Dim i as Single

For i = 1 To 10 Step 0.5
    '
Next

但请注意,由于floating numbers not being precise,您可能会收到一些不需要的号码。

答案 1 :(得分:3)

Sub a()
  For i = 1 To 10 Step 0.1
   Debug.Print i
  Next i
End Sub

答案 2 :(得分:0)

您可以使用十进制生成器。

def loop_decimal(loop_start_value, loop_stop_value, loop_step_value = 1):

# Input arguments error check
if not loop_step_value:
    loop_step_value = 1

loop_start_value = decimal.Decimal(str(loop_start_value))
loop_step_value = decimal.Decimal(str(loop_step_value))
loop_stop_value = decimal.Decimal(str(loop_stop_value))

# Case: loop_step_value > 0
if loop_step_value > 0:
    while loop_start_value < loop_stop_value:
        yield loop_start_value
        loop_start_value += loop_step_value

# Case: loop_step_value < 0
else:
    while loop_start_value > loop_stop_value:
        yield loop_start_value
        loop_start_value += loop_step_value

调用生成器会产生:

for x in (loop_decimal(0.1, 0.9, 0.1)):
    print(x)

0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9

要将浮点数转换为精确的十进制值,请在str()命令中使用decimal.Decimal()。 十进制。十进制(str(float_value))

如果您将None或0.0传递给step参数,则将使用默认值1。

这适用于递增和递减循环。