如果在计算器中变量未声明为0,则结果错误

时间:2018-10-30 15:25:32

标签: vb.net

每个人。我正在尝试制作一个基本的计算器,到目前为止,我只能使用加法,sqrt和%。令我感到困惑的是,如果我在执行操作后没有将第一个数字声明为0,则会给我错误的结果。

例如:

num2 += Val(displayPanel.Text)
result = num1 + num2
displayPanel.Text = result
num1 = 0
num2 = 0

这段特定代码会在给我正确结果的同时

num2 += Val(displayPanel.Text)
result = num1 + num2
displayPanel.Text = result
如果我输入1+1 = 2 + 1

会给我答案'5'。我的其他班级也是如此:

num1 += Val(displayPanel.Text)
result = Math.Sqrt(num1)
displayPanel.Text = result
num1 = 0

在执行返回到4的sqrt of 9 + 1后,会给我正确的结果。而如果我删除了num1 = 0,则执行sqrt of 9 + 1将会是13。似乎它忽略了操作数,而是加入了这两个数字作为sqrt方法的一个字符串。

我的程序现在可以正常工作,但是有人可以向我解释为什么不将num1或num2声明为0会给我带来错误的计算结果吗?

Public Class Form1
Dim num1 As Single
Dim num2 As Single
Dim result As Single

addBtn_Click(sender As Object, e As EventArgs) Handles addBtn.Click
num1 += Val(displayPanel.Text)
displayPanel.Text = ""

equalBtn_Click(sender As Object, e As EventArgs) Handles equalBtn.Click
num2 += Val(displayPanel.Text)
result = num1 + num2
displayPanel.Text = result
num1 = 0
num2 = 0

sqrt_Click(sender As Object, e As EventArgs) Handles sqrt.Click
num1 += Val(displayPanel.Text)
result = Math.Sqrt(num1)
displayPanel.Text = result
num1 = 0

3 个答案:

答案 0 :(得分:1)

我认为您可能对+=有疑问。也许将其更改为简单的=

要知道这里发生的一切有点困难,因为我看不到所有代码。假设问题开始时num1等于0。

另外,让我们将+=转换为等效但更易于理解的内容。

num1 = num1 + Val(displayPanel.Text)
result = Math.Sqrt(num1)
displayPanel.Text = result

如果我在文本框中输入9,则num1等于9。但是,如果我第二次执行它,则num1等于18,因为它将自身添加到当前值中。

答案 1 :(得分:0)

Vb.net中的Val函数未按预期运行。

Val尝试将文本信息转换为双精度或整数。

See the documentation for it here.

请注意,它明确声明了这一点:

  

(Val函数)在无法解释为数字,数字修饰符,数字标点或空白的第一个字符处停止转换。

这就是为什么它完全跳过=运算符,而应该跳过sqrt of之类的原因的原因;它们不是数字修饰符,标点符号,数字或空格。

还要注意,由于连续有多个测试用例,您可能会看到不正确的值。由于您的num1和num2变量具有未清除的值,因此每个其他评估将按原样重用变量。

答案 2 :(得分:0)

您的问题“向我解释如何不将num1或num2声明为0给我一个错误的计算?” 您已经在类级别(窗体级别)声明了num1和num2,它们将在其中保存分配的值,直到整个窗体超出范围。您需要它们保存在那里的值,以便您可以通过多种方法引用这些值。 使用+=时,是在要求编译器采用现有值并为其添加新值。通过简单的分配=,您将覆盖变量中包含的值。 由于+=会添加到现有值而不是完全覆盖现有值,因此您需要在每次计算后将其重置为零。 如果您使用=,则无需将其重置为零,因为它将被覆盖。