【发布时间】:2020-08-02 10:55:18
【问题描述】:
C# 编译器会为浮点数值类型抛出 OverflowException 吗?
我试过这个来弄明白:
try
{
checked
{
double d = Convert.ToDouble(Math.Pow(double.MaxValue, double.MaxValue));
Console.WriteLine(d);
}
}
catch (OverflowException)
{
throw;
}
我在控制台窗口中看到的是一个∞。
在调试时 ∞ 是否比异常更有用?
【问题讨论】:
-
根据here,转换可能抛出的异常之一是溢出异常。为什么我什么都没有?
-
不,正如您已经观察到的,它不会在大多数溢出情况下抛出。另请注意,
checked(unchecked也是如此)关键字仅适用于直接编译到块内部的代码,不适用于从块内部调用的方法。 -
如果你尝试将一个太大的数字转换为双精度数,它会导致异常,但如果你添加两个溢出的大数字,它不会抛出。不一致,我知道,但就是这样。
-
在here 中它说:OverflowException .NET Framework 和 .NET Core 2.2 及更早版本:s 表示小于 MinValue 或大于 MaxValue 的数字。但是,它是关于 double.Parse 的。
标签: c# exception overflowexception