Office中国论坛/Access中国论坛

标题: IIf 函数的陷阱 [打印本页]

作者: t小宝    时间: 2015-5-13 22:21
标题: IIf 函数的陷阱
IIf 函数有3个参数,可以是3个表达式,第1个表达式的值为真时返回第2个表达式的值,为假则返回第3个表达式的值。
虽然只是返回1个值,但IIf却要把所有表达式都计算一遍。按理说第1个表达式为真时,只计算第2个表达式的值即可,但却多余地把第3个表达式也计算了。因为这个原因,使得IIf函数的效率比较低,更严重的是还造就了一个陷阱。
请看下面的代码:
y = IIf(x = 0, 0, 1 / x)
为了避免除0错误,在IIf的第1个参数中判断当x=0时,直接返回0。但当x真的等于0时,结果还是会出现除0错误,因为IIf把第3个表达式也计算了!

作者: linlancxh    时间: 2015-5-13 22:23
{:soso_e100:}
作者: tmtony    时间: 2015-5-13 22:24
这个的确是的。很多人会忽略这个问题。很好的释疑的文章!
作者: purplerose    时间: 2015-5-13 22:39
即然能意识到有陷阱,那如何去避免呢?希望小宝老师能有解!{:soso_e121:}{:soso_e183:}
作者: t小宝    时间: 2015-5-13 22:44
purplerose 发表于 2015-5-13 22:39
即然能意识到有陷阱,那如何去避免呢?希望小宝老师能有解!

目前想到的只有用if语句了
if x=0 then
  y=0
else
  y=1/x
end if
作者: todaynew    时间: 2015-5-14 08:15
原来如此
作者: 盗梦    时间: 2015-5-14 08:51
嗯嗯,这个我也碰过,所以现在很少用iif
作者: 风中漫步    时间: 2015-5-14 16:26
谢谢分享.
作者: 轻风    时间: 2015-5-15 10:05
不说还真不知道,谢谢小宝。
作者: wang1950317    时间: 2015-5-15 11:54
小宝老师真是细心、严谨。
作者: purplerose    时间: 2015-5-18 16:07
谢谢小宝老师解答,只有用IF()来分开执行了{:soso_e121:}{:soso_e183:}
作者: lxzhang    时间: 2015-5-18 17:17
如何解决此问题。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3