建设单位验收结论:我用EXCEL VBA编程时,浮点除(/)为什么总是四舍五入后进行?搞得<1的数都变成0了?请教高手!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 02:08:11
源码如下:
Private Sub CommandButton1_Click()
Dim p, P1, m, a, b As Double
Dim TempX, TempY As Integer
Dim n
For TempY = 4 To 8 Step 1
p = 0
For TempX = 2 To 13 Step 1
If (TempX = 3) Then
GoTo 22
ElseIf (WorksheetFunction.IsNumber(Cells(TempY, TempX).Value) And Cells(9, TempX).Value) Then
p = p + (Cells(TempY, TempX).Value / Cells(9, TempX).Value)
End If
22:
Next TempX
Cells(TempY, 14).Value = p
Next TempY

这么写是不对的

Dim x, y As Double

并不代表把 x 和 y 都声明为 Double,VB 语言认为,你这里只是指明了 y 的类型是 double,而 x 被认为是变体型的,它的类型由第一次赋值决定。所以,你的 p 在被赋值为 0 以后,就被当作是 Integer 型了,后面的运算当然就只有整数没有小数了。

所以前面的例子正确应写作:

Dim x As Double, y As Double