日期:2014-05-20  浏览次数:21021 次

关于使用异常处理的小问题 附源程序
本人编写计算sqrt(|x*x-y*y|)+x的值。通过try,catch,finally来实现绝对值功能。但不知为什么当输入的值为x <y时,结果显示 "z=非数值 "!
                                                                            请各位朋友帮忙解释一下!
                                                                                                                谢先!
using   System;
class   Test
{
      static   void   Main()
      {
            double   x,   y,   z;
            x   =   Convert.ToDouble(Console.ReadLine());
            y   =   Convert.ToDouble(Console.ReadLine());
            z   =   Convert.ToDouble(Console.ReadLine());
            try
            {
                  z   =   Math.Sqrt(x   *   x   -   y   *   y);
            }
            catch
            {
                  z   =   Math.Sqrt(y   *   y   -   x   *   x);
            }
            finally
            {
                  z   =   z   +   x;                  
            }
            Console.WriteLine( "z={0} ",   z);
            Console.ReadKey();
      }
}



------解决方案--------------------
当x <y时
Math.Sqrt不认为是异常也就是
catch
{
z = Math.Sqrt(y * y - x * x);
}
没执行
------解决方案--------------------
浮点表达式可以包含下列值集:
正零和负零。
正无穷和负无穷。
非数字值 (NaN)。
有限的非零值集。


x <y时返回非数字值 (NaN),是正常值,当然没有异常,你只有自己加判断