• 老鼠, 老虎傻傻分不清楚之Double.NaN


        如果看到这段代码,客官您认为会输出什么?

        

    static void Main(string[] args)
            {
    
                double tmpValue=double.NaN;
                if(tmpValue==double.NaN)
                {
                    Console.WriteLine("这是正常输出?");
                }
                else
                {
                    Console.WriteLine("这是神马情况?");
                }
              
                Console.Read();
            }

      如果是"这是正常输出?",恭喜您!     可以去面壁了!

       哈哈,不过玩数据库的同学都知道这个东西看上去会感觉不对劲,但是也不好说是哪里不对。

         其实结果是:

         

         下面详细说一下:

    public const double NaN = 0.0 / 0.0;

    表示不是数字 (NaN) 的值。 此字段为常数。

      有的同学会说我知道了,因为NaN的值是0.0/0.0,那么写成这个样子输出是什么呢?

         

      double tmpValue = double.NaN;
                if ((0.0/0.0) == double.NaN)
                {
                    Console.WriteLine("这是正常输出?");
                }
                else
                {
                    Console.WriteLine("这是神马情况?");
                }

       其实结果是和上面一样的。MSDN上的游戏法则:

       当未定义算术运算时,Double.NaN 表示非数字结果。 测试一个值与 Double.NaN 之间的相等关系的任何表达式始终返回 false。 测试一个值与 Double.NaN 之间的不等关系的任何表达式始终返回 true。

    如何解决冲突。若要修复与此规则的冲突并准确确定某个值是否表示 Double.NaN,请使用 Single.IsNan 或 Double.IsNan 来测试值。

         翻开Double类的源代码会发现:

           

    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
            public static bool IsNaN(double d) 
            { 
                //Jit will generate inlineable code with this
    // warning CS1718: comparison to same variable 
    #pragma warning disable 1718
                if (d != d)
                {
                    return true; 
                }
                else 
                { 
                    return false;
                } 
    #pragma warning restore 1718
            }

             至于:ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)是什么意思,请大家参阅MSDN。至于数据库的Null判断也是is null 不要搞错了哦,否则坑太深不容易出来 。^_^

          另这个扩展阅读(这个Attribute在Object类中的作用)

          http://kb.cnblogs.com/page/69614/

  • 相关阅读:
    flask-script插件
    狗书(flask基础)
    2018.1.18纪事
    py3.6 + xadmin的自学网站搭建
    使用selenium抓取淘宝的商品信息
    pyquery操作
    requests模块
    python3里的Urllib库
    随便写点
    How many ways?? HDU
  • 原文地址:https://www.cnblogs.com/wangn/p/3612923.html
Copyright © 2020-2023  润新知