每个人。我正在尝试制作一个基本的计算器,到目前为止,我只能使用加法,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
答案 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,它们将在其中保存分配的值,直到整个窗体超出范围。您需要它们保存在那里的值,以便您可以通过多种方法引用这些值。
使用+=
时,是在要求编译器采用现有值并为其添加新值。通过简单的分配=
,您将覆盖变量中包含的值。
由于+=
会添加到现有值而不是完全覆盖现有值,因此您需要在每次计算后将其重置为零。
如果您使用=
,则无需将其重置为零,因为它将被覆盖。