根据设计,为什么C#编译器允许任何浮点值或双精度值除以零?
class Program
{
static void Main(string[] args)
{
double x = 0.0 / 0;
float y = 1f / 0;
}
}
答案 0 :(得分:10)
因为IEEE 754浮点值具有特殊的非数字值来处理这个问题:
PS Home:\> 1.0/0
Infinity
PS Home:\> 0.0/0
NaN
将整数除以零总是异常(在C#意义上 1 ),所以你可以直接抛出异常。
1 将浮点数除以零也是一个例外,但是处于完全不同的水平,许多编程语言将其抽象出来。
答案 1 :(得分:1)
因为浮点值具有无穷大的有效(且真正有用)表示,而任何类型的整数都没有。
答案 2 :(得分:0)
编译器允许你将float或double除以零的原因是float和double在正无穷大和负无穷大(和“不是数字”)的概念上有表示,所以这是一个有意义的事情允许。
一个奇怪的是编译器失败了
decimal d = 2;
decimal d2 = d/0M
除以零,即使它在编写整数的等效代码时也会发现它。