开始编程的书籍通常包括这样的警告:“不要被零除!你会得到一个运行时错误!”
在VB.NET中,情况发生了变化。尽管有更多的编程选项和更精确的计算,但要理解事情为什么会这样发生并不总是容易的。
在这里,我们将学习如何使用VB.NET的结构化错误处理来处理零除法。在此过程中,我们还介绍了新的VB.NET常量:NaN、Infinity和Epsilon。
如果在VB.NET中运行“除以零”方案,则会得到以下结果:
Dim a, b, c As Double a = 1 : b = 0 c = a / b Console.WriteLine( _ "Have math rules" _ & vbCrLf & _ "been repealed?" _ & vbCrLf & _ "Division by zero " _ & vbCrLf & _ "must be possible!")这是怎么回事?答案是VB.NET实际上给出了数学上正确的答案。从数学上讲,你可以除以零,但得到的是“无穷大”。
Dim a, b, c As Double a = 1 : b = 0 c = a / b Console.WriteLine( _ "The answer is: " _ & c) ' Displays: ' The answer is: infinity“无限”值对于大多数业务应用程序来说并不太有用。(除非首席执行官想知道他的股票红利的上限是多少。)但它确实可以防止您的应用程序像功能较弱的语言一样在运行时异常时崩溃。
NET甚至允许您执行计算,从而为您提供了更大的灵活性。看看这个:
Dim a, b, c As Double a = 1 : b = 0 c = a / b c = c + 1 ' Infinity plus 1 is ' still infinity为了保持数学上的正确性,VB.NET为您提供了一些计算(如0/0)的答案NaN(不是数字)。
Dim a, b, c As Double a = 0 : b = 0 c = a / b Console.WriteLine( _ "The answer is: " _ & c) ' Displays: ' The answer is: NaNVB.NET还可以区分正无穷大和负无穷大:
Dim a1, a2, b, c As Double a1 = 1 : a2 = -1 : b = 0 If (a1 / b) > (a2 / b) Then _ Console.WriteLine( _ "Postive infinity is" _ & vbCrLf & _ "greater than" _ & vbCrLf & _ "negative infinity.")除了正整数和负整数外,VB.NET还提供了ε,即大于零的最小正双精度值。
请记住,VB.NET的所有这些新功能仅适用于浮点(双精度或单精度)数据类型。这种灵活性可能导致一些Try-Catch-Finally(结构化错误处理)混淆。例如,上面的.NET代码运行时不会引发任何类型的异常,因此在Try-Catch-Finally块中对其进行编码是没有帮助的。要测试除法为零,您必须编写如下测试代码:
If c.ToString = "Infinity" Then ...即使对程序进行编码(使用整数而不是单或双类型),仍然会出现“溢出”异常,而不是“被零除”异常。如果您在web上搜索其他技术帮助,您会注意到这些示例都测试OverflowException。
.NET实际上将DivideByZeroException作为合法类型。但是如果代码从未触发异常,您什么时候会看到这个难以捉摸的错误?
事实证明,微软关于Try-Catch-Finally块的MSDN页面实际上使用了一个被零除的示例来说明如何编写代码。但有一个微妙的“陷阱”,他们无法解释。他们的代码如下所示:
Dim a As Integer = 0 Dim b As Integer = 0 Dim c As Integer = 0 Try a = b \ c Catch exc As Exception Console.WriteLine("A run-time error occurred") Finally Console.ReadLine() End Try此代码确实会触发实际的除零异常。
但是为什么这段代码会触发异常,而我们以前编写的代码都不会触发异常呢?微软没有解释什么?
请注意,它们使用的操作不是除法(“/”),而是整数除法(\”)!(其他Microsoft示例实际上将变量声明为整数。)事实证明,整数计算是唯一实际引发该异常的情况。如果微软(以及其他复制他们代码的页面)能解释这些小细节就好了。
...执行某个任务并向调用代码返回值的过程,而过程是程序中的可执行语句块。 visualbasic(VB.NET)是在微软开发的.NET框架上实现的一种编程语言。它是一种现代的通用编程语言。它有助于开发高效的程序,而且更容易学习语言。...
...选项。VB是为一个简单而有能力的软件开发而设计的。VB中的程序基本上是一系列创建和操作变量的命令。这种语言的程序也称为宏。 VB.NET代表支持Visual Basic网络的技术。它是Microsoft的.NET framework语言之一。这种语言是专门为VB开...
...的过程。例如,将整数类型强制转换为字符串类型。VB.NET中的某些操作需要特定的数据类型才能工作。强制转换将创建所需的类型。本系列由两部分组成的第一篇文章,VB.NET中的强制转换和数据类型转换,介绍了强制转换。本文...
...务器和客户端之间传输信息。例如,“购物车”应用程序中的表单可能包含有关购买特定项目的请求的信息。可以使用CGI将信息传递到web服务器。CGI仍然被大量使用,ASP是一个完整的替代方案,可以更好地与Visual Basic配合使用。...
...要原因是,您可以四处移动对象。考虑可能性。由于.NET中的“一切都是对象”,所以可以序列化任何内容并将其保存到文件中。因此,您可以序列化图片、数据文件、程序模块的当前状态(“状态”类似于程序在某个时间点的...
...择“资源”选项卡。您可以通过双击解决方案资源管理器中的“我的项目”或“项目”菜单项下的“项目属性”来打开此对话框。 资源文件的类型 串 图像 图标 音频 文件夹 其他 资源文件简化了全球化 使用资源文件增...
...在VB.NET中打开新的Windows应用程序项目。->将工具箱中的复选框添加到表单中。->单击解决方案资源管理器顶部的“显示所有文件”按钮。 这将显示VisualStudio为您的项目创建的文件(因此您不必这样做)。作为一个...
...件 在project Explorer窗口中,您可以在VB 6和VB.NET中看到项目中的资源(VB.NET中的解决方案资源管理器-它们必须使其稍微有所不同)。在VB6中,资源不是默认工具,因此新项目不会有任何资源。因此,让我们为一个项目添加一个简...
...;一整套项目可以是同一解决方案的一部分,该.sln文件中的设置和选项可以应用于其中的所有项目。在VisualStudio中一次只能打开一个解决方案,但该解决方案中可以打开许多项目。这些项目甚至可以使用不同的语言。 通过创...
...,这确实有效: 如果您从internet借用代码,请先查找其中的区域,然后再将其添加到代码中。众所周知,黑客会在一个区域内嵌入不好的东西,以防被发现。