VBA中Int函数的异常行为疑问
VBA中Int函数的异常行为疑问
嘿,这个问题其实是浮点数精度误差在搞鬼,很多刚接触VBA的Double类型都会踩这个坑!
咱们先拆解一下你预期的计算逻辑:0.00024575 × 10000000 应该等于2457.5,再加0.5就是2458,用Int取整本该得到2458对吧?但实际结果却是2457,核心原因是:Double类型是二进制浮点数,没法精确存储所有十进制小数。
你可以在Immediate窗口里直接打印中间计算结果试试:
Debug.Print 0.00024575*10000000+0.5
你会发现输出的不是精确的2458,而是一个非常接近但略小于2458的数值(比如2457.9999999999995这类),而Int函数的作用是取小于等于输入值的最大整数,所以这个略小的数就被截断成2457了。
至于VarType显示为5(Double),这很正常——Double确实是双精度,但它的精度是基于二进制的,像0.00024575这种十进制小数,转换成二进制后是无限循环的,所以存储时只能用近似值,这就导致后续计算出现了细微偏差。
如果要得到你预期的结果,有几个解决办法:
- 改用
Round函数:它会按照四舍五入的规则处理,而不是直接截断Debug.Print Round(0.00024575*10000000, 0) ' 输出2458 - 转换为Decimal类型计算:Decimal是十进制浮点数,能精确存储更多十进制小数
Debug.Print Int(CDec(0.00024575)*10000000+0.5) ' 输出2458
备注:内容来源于stack exchange,提问作者Atreyu
相关产品推荐
相关产品推荐

