public class Account
{
        public float div(float a, float b)
        {
            return a/b;
        }
}
        private void button1_Click(object sender, System.EventArgs e)
        {
            Account ac = new Account();
            float i = ac.div(3,0);
            MessageBox.Show(i.ToString());
        }在上面这种情况下,c#不会报错,但在下面的这种情况,却报错,为何?
public class Account
{
        public int div(int a, int b)
        {
            return a/b;
        }
}
        private void button1_Click(object sender, System.EventArgs e)
        {
            Account ac = new Account();
            int i = ac.div(3,0);
            MessageBox.Show(i.ToString());
        }int形,除零会报错,float形除零却不会报错.
为何?主要是因为我在用NUnit作单元测试,测试边界值时遇到的.
有大侠可以说说吗?

解决方案 »

  1.   

    float类型的/运算做了异常处理,而int型未做
      

  2.   

    楼上的楼上说得并不正确,0可以是精确的0,只不过 float 型的数在除以0的时候,会得到
    float.PositiveInfinity 或者 float.NegativeInfinity
    也就是正无穷大或者负无穷大
    你可以用 == 的方法来判断或者使用 float.IsInfinity() 方法来判断是否为无穷大
      

  3.   

    在楼主的程序里,int i = ac.div(3,0) 运行以后, i 的值就是 float.PositiveInfinity
      

  4.   

    写错了,应该是 float i = ac.div(3, 0) 以后 i == float.PositiveInfinity
      

  5.   

    Tenner(BE.Tenner) :你自己去查查IEEE754标准看看我说的对不对。浮点数的0不是通常意义上的0,
      

  6.   

    Tenner(BE.Tenner) :你自己去查查IEEE754标准看看我说的对不对。浮点数的0不是通常意义上的0,==================你说的没有错,所以.net在这里做了处理,为了防止浮点数除以0时会因为精度不够而产生一个很大的数。所以.net的浮点数在除以0时会得到一个常量Infinity,所以在.net里浮点数的0可以是精确的0的