zoukankan      html  css  js  c++  java
  • C#中你不知道的double类型 0.0的运算

    前段时间偶然看到c#double类型0.0的运算。经研究,总结如下, 如有问题请不吝赐教,谢谢。

    1, 我们都知道,C# 任何数除以0 都会报错 “Attemped to divide by zero”

    Eg1:

    Console.WriteLine(1/0); => 编译通不过。

    Eg2:

    Int i = 1;

    Int j=0;

    Console.WriteLine(i/j);  => 编译通过,但运行会报同样的错。

    这里为什么编译能通过呢? 因为C#编译器在只有在运行的时候才给变量赋值。编译的时候不赋值,只是当作变量来处理。

    Eg3:

    Consoe.WriteLine(1.0/0); => 编译通过,且运行结果为Infinity。这是因为编译器将除数0转换成了double类型0.0来处理。请看下面的例子。

    2, 但在C# 中任何数除以0.0 会是什么情况呢? 这个是不会报错的,而且还有一个具体的值。

    Eg4:

    Console.WriteLine(1/0.0);  => 编译通过,得到Infinity, 无穷大的意思。

    3, 我们都知道如果 0除以任何数都为0。但C# 中 0/0.0 得到的却是:NaN 意思是Not a Number 的意思。

    为什么会这样呢? 因为编译器是首先觉得0除以任何数都是0, 但任何数除以0.0 都是无穷大。所以,他不知道判断应该是0还是无穷大。所以就给出了NaN, Not a number.

    Eg4:

    Console.WriteLine(0/0.0.); =>NaN

    4, 任何数除或除NaN都等于NaN.

    5, 任何数除或者乘Infinity 都等于Infinity,0和NaN除外, Infinity*0 = NaN, Infinity* NaN= NaN.

    Eg5:

    Console.WriteLine(0/0.0/0.0); => NaN

    Console.WriteLine(1/0.0*1); =>Infinity.

    Console.WriteLine(1/0.0*(0/0.0)); =>NaN.

    Console.WriteLine(1/0.0*0) => NaN

    6, 值得注意的是: Infinity 和 NaN 都市double类型。

  • 相关阅读:
    深入浅出Win32多线程程序设计【2】线程控制
    深入浅出Win32多线程程序设计【1】基本概念
    在两个ASP.NET页面之间传递值
    Javascript基础
    DataGrid的几个小技巧
    推荐取代Visio的中国人的软件——Edraw
    ASP.NET如何防范SQL注入攻击
    软件版本号规定原则
    三层体系结构总结(三)
    .Net工具 .NET文档生成工具2.2
  • 原文地址:https://www.cnblogs.com/nvye/p/3115686.html
Copyright © 2011-2022 走看看