

VBA基础
新手来看:为什么数字计算结果总是错误?变量类型声明的重要性
2008-11-26 09:20:32
该代码示例连基本的数据类型都没声明
Function gs(t As Currency)Dim d As Currency
d = t - 1600If d < 0 Thengs1 = 0ElseIf d <= 500 Thengs1 = d * 0.05ElseIf d <= 2000 Thengs1 = d * 0.1 - 25ElseIf d <= 5000 Thengs1 = d * 0.15 - 125ElseIf d <= 20000 Thengs1 = d * 0.2 - 375ElseIf d <= 40000 Thengs1 = d * 0.25 - 1375ElseIf d <= 60000 Thengs1 = d * 0.3 - 3375End IfDebug.Print gs1 '(经测试在计算本例时,gs1= 9.585)gs = VBA.Round(gs1, 2)End Function
Sub dd()Dim t As CurrencyDim tt As Currencyt = 2091.7tt = 300ttt = gs(t - tt)Debug.Print ttt 'ttt是9.59End Sub |
结果是 9.585四舍五入应该是 9.59
不用ROUND代码还是有问题是因为变量类型没声明你不声明变量默认用 Variant 类型
Function TestVariant() Dim v v = 555.5545 Debug.Print TypeName(v) 'DoubleEnd Function
Variant 类型的数字如果包含小数点默认是双精度,看一下帮助双精度的表示方法是 e 的多少次方。e根本不是整数,所以计算多次后必定有 .????9999999 出现,导致数据结果错误。