|
Sub 统计()
Dim arr, temp, y As Integer, arr1(1 To 5, 1 To 4)
arr = Range("b2:f12")
y = 600
MsgBox y / 500 - 0.2 '显示为1
MsgBox Int(1) '显示为1
MsgBox Int(y / 500 - 0.2) '显示为0,为什么?
For Each temp In arr
For y = 100 To 1000 Step 100
If temp < y Then
arr1((y / 100 - 1) Mod 5 + 1, Int(y / 500 - 0.2) * 2 + 2) = arr1((y / 100 - 1) Mod 5 + 1, Int(y / 500 - 0.2) * 2 + 2) + 1
Exit For
End If
Next y
Next temp
For y = 100 To 1000 Step 100
arr1((y / 100 - 1) Mod 5 + 1, Int(y / 500 - 0.2) + 1) = "<" & y
Next y
Range("h3:k3") = Array("条件", "个数", "条件", "个数")
Range("h3").Resize(5, 4) = arr1
End Sub
结合网上搜了几个帖,和自己的理解认为:
1.只要相除就是,就是double型
y是int型,500也是,但两者相除的结果一定是double型。
2.double是浮点型。浮点数在计算机中的表示是有误差的,浮点数也是有有效位数的 。也就是说,y/500精确值是1.19999999999...,所以之后减0.2其实只是近似于1,再取整,也就是0。
vba对数据类型的尺度是要宽松的,比如Java在double结果赋值给int型变量会阻止并报错。看来,严谨的机制还是有好处的。
|
|