VB Visual Basic 2026 中文教程
第 6 课 · 运算基础

常量、运算符与表达式

变量负责保存会改变的数据,而常量保存程序运行期间不应改变的固定值。程序再通过各种运算符,把这些值组合成表达式,完成计算、比较、逻辑判断与文字连接。本课将建立后续条件判断和实际应用开发所需的运算基础。

适合:完成第 5 课的初学者建议时间:45–60 分钟实作:购物金额计算器

本课学习目标

  • 理解变量与常量的区别,并会使用 Const
  • 掌握 + - * / \ Mod ^ 等算术运算符。
  • 认识 = <> > < >= <= 等比较运算符。
  • 理解 AndAlsoOrElseNot 的基本作用。
  • 使用 & 连接字符串。
  • 理解表达式与运算优先级,并学会用括号提高可读性。
  • 完成一个计算小计、折扣、示范税额和最终金额的购物金额计算器。

6.1 什么是常量?

常量(Constant)与变量一样都有名称和数据类型,但常量建立以后不能在程序运行期间重新赋值。

在 Visual Basic 中使用 Const 声明常量:

Const TaxRate As Decimal = 0.06D
Const AppTitle As String = "购物金额计算器"
Const MaximumScore As Integer = 100

上面的 TaxRateAppTitleMaximumScore 都是固定值。例如:

Const TaxRate As Decimal = 0.06D

' 下面这行会产生错误,因为常量不能重新赋值
TaxRate = 0.08D
变量

Dim price As Decimal

值可以随着程序执行而改变,例如商品价格、数量、用户输入和计算结果。

常量

Const TaxRate As Decimal

适合保存程序中不希望被意外修改的固定值,让代码意义更清楚。

为什么不直接到处写 0.06? Const TaxRate As Decimal = 0.06D 比一堆没有说明的数字更容易阅读。以后看到 TaxRate 就知道这个数值代表什么。

6.2 什么是表达式(Expression)?

表达式是由值、变量、常量、运算符和方法调用组合而成,并计算出一个结果。

unitPrice×quantity=subtotal

对应的 VB.NET 代码:

Dim subtotal As Decimal = unitPrice * quantity

右边的 unitPrice * quantity 是表达式。程序先计算表达式的结果,再把结果赋给 subtotal

6.3 算术运算符

算术运算符用于数字计算。以下是最常用的运算符:

运算符作用示例结果
+加法8 + 311
-减法8 - 35
*乘法8 * 324
/一般除法8 / 3约 2.6667
\整数除法8 \ 32
Mod求余数8 Mod 32
^乘方2 ^ 38

一般除法 / 与整数除法 \

Dim answer1 As Double = 8 / 3
Dim answer2 As Integer = 8 \ 3

/ 保留小数部分;\ 进行整数除法,不保留小数部分。

Mod:取得余数

Dim remainder As Integer = 17 Mod 5

结果为 2,因为 17 除以 5 后余数是 2。以后判断奇数与偶数时,Mod 会很实用。

6.4 赋值与 = 运算符

Visual Basic 的等号 = 会根据使用位置承担不同角色。在赋值语句中,它表示“把右边的结果存入左边”。

Dim price As Decimal = 25.5D
Dim quantity As Integer = 4
Dim subtotal As Decimal = price * quantity

第三行不是数学方程式,而是:

先计算price * quantity→ 再把结果存进subtotal
= 也可以表示“是否相等” 在比较表达式中,例如 score = 100,等号是在比较两个值是否相等,结果会是 Boolean。下一节马上会看到。

6.5 比较运算符

比较运算会产生 Boolean 结果,也就是 TrueFalse

=

等于

10 = 10 → True

<>

不等于

10 <> 5 → True

>

大于

10 > 5 → True

<

小于

10 < 5 → False

>=

大于或等于

10 >= 10 → True

<=

小于或等于

8 <= 10 → True

Dim score As Integer = 75

Dim passed As Boolean = score >= 50
Dim perfect As Boolean = score = 100

lblResult.Text = "及格:" & CStr(passed)

这里还没有使用 If。程序只是把比较结果存入 Boolean 变量。第 7 课才会正式学习怎样根据 True 或 False 执行不同代码。

6.6 逻辑运算符

逻辑运算符用于组合或反转 Boolean 表达式。现代 VB.NET 程序经常使用 AndAlsoOrElseNot

运算符意思示例
AndAlso两边都为 True,结果才是 Trueage >= 18 AndAlso hasTicket
OrElse至少一边为 True,结果就是 TrueisMember OrElse hasCoupon
Not把 True 与 False 反转Not isClosed
Dim age As Integer = 22
Dim hasTicket As Boolean = True

Dim canEnter As Boolean = age >= 18 AndAlso hasTicket
lblResult.Text = CStr(canEnter)
为什么介绍 AndAlso / OrElse,而不是只用 And / Or? AndAlsoOrElse 会进行“短路求值”:当左边已经足以决定结果时,不必继续计算右边。它们在条件表达式中通常更合适。AndOr 仍然存在,并且还有其他用途。

6.7 使用 & 连接字符串

Visual Basic 推荐使用 & 把文字连接起来:

Dim firstName As String = "小明"
Dim message As String = "你好," & firstName & "!"

lblResult.Text = message

数字与字符串组合时,可以先转换成 String:

Dim quantity As Integer = 3
lblResult.Text = "购买数量:" & CStr(quantity)
不要把 + 当作主要的字符串连接运算符 + 主要用于算术加法。虽然某些字符串情形下也可以工作,但初学阶段统一使用 & 更清楚,也能减少类型转换造成的混乱。

6.8 运算优先级

一个表达式里如果同时出现多个运算符,VB.NET 会按照优先级计算。下面列出初学阶段最重要的顺序:

1( )括号中的表达式优先处理。
2^乘方。
3* / \ Mod乘法、除法、整数除法与余数。
4+ -加法与减法。
5&字符串连接。
6= <> > < ...比较运算。
7Not / AndAlso / OrElse逻辑组合。

例如:

Dim result1 As Integer = 10 + 5 * 2
Dim result2 As Integer = (10 + 5) * 2

result1 是 20,而 result2 是 30。

不确定时就使用括号 即使你已经知道优先级,适当加入括号也能让表达式更容易阅读。例如 subtotal * (discountPercent / 100D) 比完全依赖优先级更直观。

6.9 金额计算为什么适合 Decimal?

在第 5 课已经认识 Decimal。对于价格、折扣和金额等十进制资料,通常比浮点类型更适合。

Dim unitPrice As Decimal = 19.9D
Dim quantity As Integer = 3

Dim subtotal As Decimal = unitPrice * quantity

数值后面的 D 表示 Decimal 字面值。例如 0.06D 明确告诉编译器这是 Decimal。

6.10 实作:购物金额计算器

建立新的 Windows Forms 项目:

ShoppingCalculator2026

这个程序让用户输入商品单价、数量和折扣百分比,然后计算小计、折扣金额、折扣后金额、示范税额和最终金额。

本例的 6% 只是编程教学示范 TaxRate = 0.06D 只是为了练习常量和表达式,并不代表任何地区当前实际适用的税率。
Shopping Calculator 2026
商品单价:
25.50
数量:
4
折扣 (%):
10
操作:
计算金额
小计:102.00
折扣:10.20
示范税额:5.51
最终金额:97.31

在 Form1 加入这些主要控件:

控件NameText / 用途
FormForm1Text = 购物金额计算器
TextBoxtxtUnitPrice输入商品单价
TextBoxtxtQuantity输入购买数量
TextBoxtxtDiscount输入折扣百分比
ButtonbtnCalculateText = 计算金额
ButtonbtnClearText = 清除
LabellblResult显示计算结果;建议 AutoSize = True

计算公式

subtotal = unitPrice * quantity
discountAmount = subtotal * (discountPercent / 100D)
afterDiscount = subtotal - discountAmount
taxAmount = afterDiscount * TaxRate
finalTotal = afterDiscount + taxAmount

完整的 btnCalculate_Click 代码

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) _
    Handles btnCalculate.Click

    Const TaxRate As Decimal = 0.06D

    Dim unitPrice As Decimal = CDec(txtUnitPrice.Text)
    Dim quantity As Integer = CInt(txtQuantity.Text)
    Dim discountPercent As Decimal = CDec(txtDiscount.Text)

    Dim subtotal As Decimal = unitPrice * quantity
    Dim discountAmount As Decimal = subtotal * (discountPercent / 100D)
    Dim afterDiscount As Decimal = subtotal - discountAmount
    Dim taxAmount As Decimal = afterDiscount * TaxRate
    Dim finalTotal As Decimal = afterDiscount + taxAmount

    lblResult.Text =
        "小计:" & subtotal.ToString("N2") & Environment.NewLine &
        "折扣:" & discountAmount.ToString("N2") & Environment.NewLine &
        "折扣后金额:" & afterDiscount.ToString("N2") & Environment.NewLine &
        "示范税额:" & taxAmount.ToString("N2") & Environment.NewLine &
        "最终金额:" & finalTotal.ToString("N2")

End Sub
这里暂时使用 ToString("N2") 它只是让金额显示两位小数,例如 97.31。有关数字、日期和时间的完整格式化方法会在第 12 课详细学习。

清除按钮

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    txtUnitPrice.Clear()
    txtQuantity.Clear()
    txtDiscount.Clear()
    lblResult.Text = ""
    txtUnitPrice.Focus()
End Sub

6.11 逐步理解计算代码

1
建立常量

Const TaxRate As Decimal = 0.06D 保存固定的示范税率。

2
读取并转换输入

TextBox.Text 是 String,因此使用 CDec 和 CInt 转换成可计算的数字。

3
建立表达式

程序使用乘法、除法、减法和加法依次得到各项金额。

4
括号控制计算意义

(discountPercent / 100D) 先把百分数转换成比例。

5
显示结果

使用 & 把标签文字、计算结果和换行符连接成完整输出。

6.12 测试程序

可以使用下面的数据测试:

输入数值
商品单价25.50
数量4
折扣10

按公式计算:

  • 小计 = 25.50 × 4 = 102.00
  • 折扣 = 102.00 × 10% = 10.20
  • 折扣后金额 = 102.00 − 10.20 = 91.80
  • 示范税额 = 91.80 × 6% = 5.508
  • 最终金额 = 91.80 + 5.508 = 97.308,显示为 97.31
输入空白或非数字会怎样? 本课仍使用第 5 课学过的 CDecCInt。如果用户输入“abc”或空白,转换会失败。真正可靠的输入验证会在第 13 课使用 TryParse 系统学习。

6.13 初学者常见错误

错误 1

把 Const 当变量修改

常量声明后不能再赋新值。如果值需要改变,就应该使用 Dim 声明变量。

错误 2

百分比忘记除以 100

10% 在计算中通常应写成 10 / 100D,也就是 0.1。

错误 3

/ 和 \ 混淆

/ 是一般除法;\ 是整数除法,会丢弃小数部分。

错误 4

表达式没有括号

程序也许仍能运行,但复杂表达式如果缺少括号会更难阅读,也更容易写错。

6.14 小练习

  1. 加入 Const ServiceRate As Decimal = 0.02D,计算 2% 的示范服务费。
  2. 加入一个 Label,显示 finalTotal >= 100D 的 Boolean 结果。
  3. 计算数量除以 2 后的整数商和余数,分别练习 \Mod
  4. 把最终输出第一行改为“购物金额计算结果”,并使用 & 连接。
  5. 尝试改变括号位置,观察表达式结果如何改变,并解释原因。

本课复习

  1. ConstDim 有什么区别?
  2. /\ 的区别是什么?
  3. Mod 的作用是什么?
  4. 比较表达式的结果通常是什么数据类型?
  5. AndAlsoOrElse 分别表示什么?
  6. 为什么字符串连接推荐使用 &
  7. 括号如何影响运算顺序?
  8. 为什么金额计算通常适合使用 Decimal?