这可能是一个我忽略的简单问题。我有一个for循环拒绝以给定的间隔加强。下面的代码是一个更复杂的代码的摘录。我的程序运行了1小时,没有任何变化,我想把它缩小到导致运行时间很长的段。
我尝试在自己的模块中运行此代码,同样的问题也发生了。我在代码的主要代码中有其他for循环,而step
只是这个问题。任何有助于找到我出错的地方都会非常感激。
Sub Test()
Dim h As Long
Dim BiezerP0 As Double
Dim BiezerP1 As Double
Dim BiezerP2 As Double
Dim BiezerP3 As Double
Dim BiezerValue As Double
Dim BiezerStepInterval As Double
Dim BiezerLocation As Double
Dim P0Time As Double
BiezerStepInterval = 0.167
For h = 0 To 1 Step BiezerStepInterval
BiezerP0 = ((1 - h) ^ 3) * P0
BiezerP1 = 3 * ((1 - h) ^ 2) * h * P1
BiezerP2 = 3 * (1 - h) * h * h * P2
BiezerP3 = h * h * h * P3
BiezerValue = BiezerP0 + BiezerP1 + BiezerP2 + BiezerP3
BiezerLocation = h * BiezerSteps
Cells(BiezerLocation + 4, 15) = BiezerValue
Cells(BiezerLocation + 4, 16) = P0Time + (0.02 * BiezerLocation)
Next h
End Sub
我能想到的唯一一个导致这个问题的事实是0.167不能直接进入1.这会影响它吗?
答案 0 :(得分:4)
h应为Double,不长
Dim h As Double
答案 1 :(得分:2)
正如Magnetron所说,h
应该是Double
,原因是将0.167
分配给Long
会导致Long
值为0
{1}} - 如立即窗口中所示:
?Clng(0.167)
0
将0.167
添加到0
,并将结果分配给Long,再次会导致Long
值为0
。 ...
冲洗......重复......
这就是变量不会增加的原因。但是将变量类型更改为Double
,您将不会失去精度。