各位,今天发现一个小问题,在这里和大家共享,希望对大家今后的开发有帮助,至少走少弯路,不是深奥的东西,请以轻松的心情看完一下内容:
在vb.net中,我们取对数可以用system.math.log函数,但他与VB6.0不同的是.net的求对数支持多态,及log(a)默认以e为底还有log(a,newBase),后者支持变换底数,如system.math.log(8,2) 是以2为底8的对数,但问题是有时我们在对a变量未知时,就有可能处理到a=0的情况,在VB.net中log(0) = "负无穷大" 解决的办法很简单, 如果你想log(0) = 0 (当然这里抛开数学意义来说,我主要是利用他说明问题,其实有时这里log(0) = 0是很有用的,比如解决图表差异太大时画出来的图那些小的数不明显.可以用求对数解决,但有些数会是0……)精练的用一句IIF函数处理 iif(表达式,true,false) 如:
V=iif(a=0,0,system.math.log(a)) 就可以解决了
但是碰巧今天回到VB6.0处理以前的一个项目,碰到一个问题就是用了 V=log(a)出现无效的函数处理过程的错误提示,原因是a=0,有什么困难的,那末我又可以用V=iif(a=0,0,log(a)) 让a=0 给我返回0,这样就避免错误了 也出差了阿,错误提示和原来一样阿,原来微软小组在6.0时没有处理异常,而且按照函数处理顺序是一定要计数参数后再传入函数处理,所以本以为自己聪明还是避免不了要处理log(a=0),所以在VB6.0只好老老实实用if Expresion then ……: else …… :end if至少五句的表达,其实也差不多,占空间而已,所以回到VB6.0大家要小心阿,这也可以看出微软小组的细心,像这些(iif和log)在.net2003就已经都改过来了,也说明了iif不一定对一切简单条件处理都有效,已经处理异常的重要性
最后补充一点,在vb6.0要换底数可以用 log(Y)/log(X) 处理以X为底Y的对数,因为这时log不支持多态
证明: