设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4332|回复: 11
打印 上一主题 下一主题

[模块/函数] IIf 函数的陷阱

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2015-5-13 22:21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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个表达式也计算了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2015-5-13 22:23:37 | 只看该作者
{:soso_e100:}

点击这里给我发消息

3#
发表于 2015-5-13 22:24:37 | 只看该作者
这个的确是的。很多人会忽略这个问题。很好的释疑的文章!
4#
发表于 2015-5-13 22:39:53 | 只看该作者
即然能意识到有陷阱,那如何去避免呢?希望小宝老师能有解!{:soso_e121:}{:soso_e183:}

点击这里给我发消息

5#
 楼主| 发表于 2015-5-13 22:44:35 | 只看该作者
purplerose 发表于 2015-5-13 22:39
即然能意识到有陷阱,那如何去避免呢?希望小宝老师能有解!

目前想到的只有用if语句了
if x=0 then
  y=0
else
  y=1/x
end if
6#
发表于 2015-5-14 08:15:06 | 只看该作者
原来如此
回复

使用道具 举报

点击这里给我发消息

7#
发表于 2015-5-14 08:51:40 | 只看该作者
嗯嗯,这个我也碰过,所以现在很少用iif
8#
发表于 2015-5-14 16:26:40 | 只看该作者
谢谢分享.
回复

使用道具 举报

点击这里给我发消息

9#
发表于 2015-5-15 10:05:20 | 只看该作者
不说还真不知道,谢谢小宝。

点击这里给我发消息

10#
发表于 2015-5-15 11:54:13 | 只看该作者
小宝老师真是细心、严谨。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 21:59 , Processed in 0.123039 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表