VBScript数值比较不符合预期问题求助
VBScript浮点数比较异常的解决办法
你遇到的是典型的浮点数精度问题:VBScript里的数值默认是双精度浮点数,这类浮点数没办法精确表示所有十进制小数。比如3.56在二进制浮点数里是近似存储的,导致3.56*180.0/3.56计算后得到的不是严格的180.0,而是一个极接近180的数(比如179.99999999999997),直接用=比较自然会返回False。第一个例子返回True只是巧合,3.55的二进制近似值刚好让计算结果等于180.0,但这完全不可靠。
解决这个问题有两种常用办法:
方案1:用精度阈值判断
不要直接判断相等,而是检查计算结果和目标值的差值是否小于一个极小的阈值(比如0.0000001),忽略浮点数的微小误差:
Function CheckValue(input) Dim check check = False ' 允许误差范围:小于0.0000001即视为相等 If Abs(input - 180.0) < 0.0000001 Then check = True CheckValue = check End Function
方案2:先四舍五入再比较
把计算结果四舍五入到指定小数位(比如6位),再和180.0比较:
Function CheckValue(input) Dim check, roundedVal check = False roundedVal = Round(input, 6) ' 四舍五入到6位小数 If roundedVal = 180.0 Then check = True CheckValue = check End Function
内容的提问来源于stack exchange,提问作者Hendrik
相关产品推荐
相关产品推荐

