C#中你不知道的double类型 0.0的运算
2013-06-03 16:35
120 查看
前段时间偶然看到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类型。
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类型。
相关文章推荐
- java的double 类型的运算
- java之double类型运算
- (工具类)double类型数据运算解决进度不准问题
- c# vb 程序中怪异的double类型数据数学运算结果
- 解决double类型运算时精度丢失问题
- [置顶] double、float类型进行运算造成精度丢失的问题解决
- double类型数据的精确运算
- java float double类型做小数点加减运算不准确
- java中float,double类型运算的处理
- 运算 double类型的数字相加不丢失精度
- float及double类型减法运算时精度丢失问题
- 四则运算(Double类型数)工具类
- double数据类型运算精度丢失问题
- 精确运算不能用float/double,用什么类型?
- java中Double类型的运算精度丢失的问题 (小数点多出99999999999999)
- 关于java中Double类型的运算精度问题(转)
- java double类型运算问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题