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类型。

  • 相关阅读:
    正则表达式语法
    javascript刷新页面方法
    数据表操作Sql语句
    UML中的关系讲解
    ASP.net和C#的MD5加密
    Excel导入数据库,兼容Excel2003,2007
    EXCEL文件导入数据库
    javascript 控制文本框输入格式
    键盘扫描码
    jquery在不同浏览器下的兼容性问题
  • 原文地址:https://www.cnblogs.com/nvye/p/3115686.html
Copyright © 2011-2022 走看看