为什么小数会在除以零时给出编译时错误?

时间:2016-12-01 10:55:08

标签: c#

作为my previous question的后续行动,我在零除以后发现奇怪的行为(使用控制台)。我发现以下两个语句编译良好:

Console.WriteLine(1d / 0d);
Console.WriteLine(1f / 0f);

然而这两个给出了编译时错误:

Console.WriteLine(1 / 0);
Console.WriteLine(1m / 0m);

  

除以零

为什么这种行为存在差异?

1 个答案:

答案 0 :(得分:0)

对于float和double类型,允许除以0。它返回无穷大。

对于Int32和Decimal,不允许,它会引发异常。 编译器不允许在常量值上除以0,因为它会导致未定义的行为。

public class MyConsts {
public const int i = 1/0; // Constant, compile time evaluation
}

...

Console.WriteLine(MyConsts.i); // What would you expect ?

编译器无法为常量表达式计算适当的值。请记住,该值是在运行时编译的,而不是在运行时进行评估,因此无法引发异常。