本课学习目标
- 理解变量与常量的区别,并会使用 Const。
- 掌握 + - * / \ Mod ^ 等算术运算符。
- 认识 = <> > < >= <= 等比较运算符。
- 理解 AndAlso、OrElse 与 Not 的基本作用。
- 使用 & 连接字符串。
- 理解表达式与运算优先级,并学会用括号提高可读性。
- 完成一个计算小计、折扣、示范税额和最终金额的购物金额计算器。
6.1 什么是常量?
常量(Constant)与变量一样都有名称和数据类型,但常量建立以后不能在程序运行期间重新赋值。
在 Visual Basic 中使用 Const 声明常量:
Const TaxRate As Decimal = 0.06D
Const AppTitle As String = "购物金额计算器"
Const MaximumScore As Integer = 100
上面的 TaxRate、AppTitle 和 MaximumScore 都是固定值。例如:
Const TaxRate As Decimal = 0.06D
' 下面这行会产生错误,因为常量不能重新赋值
TaxRate = 0.08D
Dim price As Decimal
值可以随着程序执行而改变,例如商品价格、数量、用户输入和计算结果。
Const TaxRate As Decimal
适合保存程序中不希望被意外修改的固定值,让代码意义更清楚。
6.2 什么是表达式(Expression)?
表达式是由值、变量、常量、运算符和方法调用组合而成,并计算出一个结果。
unitPrice×quantity=subtotal
对应的 VB.NET 代码:
Dim subtotal As Decimal = unitPrice * quantity
右边的 unitPrice * quantity 是表达式。程序先计算表达式的结果,再把结果赋给 subtotal。
6.3 算术运算符
算术运算符用于数字计算。以下是最常用的运算符:
| 运算符 | 作用 | 示例 | 结果 |
|---|---|---|---|
| + | 加法 | 8 + 3 | 11 |
| - | 减法 | 8 - 3 | 5 |
| * | 乘法 | 8 * 3 | 24 |
| / | 一般除法 | 8 / 3 | 约 2.6667 |
| \ | 整数除法 | 8 \ 3 | 2 |
| Mod | 求余数 | 8 Mod 3 | 2 |
| ^ | 乘方 | 2 ^ 3 | 8 |
一般除法 / 与整数除法 \
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
6.5 比较运算符
比较运算会产生 Boolean 结果,也就是 True 或 False。
等于
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 程序经常使用 AndAlso、OrElse 和 Not。
| 运算符 | 意思 | 示例 |
|---|---|---|
| AndAlso | 两边都为 True,结果才是 True | age >= 18 AndAlso hasTicket |
| OrElse | 至少一边为 True,结果就是 True | isMember 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)
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 会按照优先级计算。下面列出初学阶段最重要的顺序:
例如:
Dim result1 As Integer = 10 + 5 * 2
Dim result2 As Integer = (10 + 5) * 2
result1 是 20,而 result2 是 30。
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
这个程序让用户输入商品单价、数量和折扣百分比,然后计算小计、折扣金额、折扣后金额、示范税额和最终金额。
折扣:10.20
示范税额:5.51
最终金额:97.31
在 Form1 加入这些主要控件:
| 控件 | Name | Text / 用途 |
|---|---|---|
| Form | Form1 | Text = 购物金额计算器 |
| TextBox | txtUnitPrice | 输入商品单价 |
| TextBox | txtQuantity | 输入购买数量 |
| TextBox | txtDiscount | 输入折扣百分比 |
| Button | btnCalculate | Text = 计算金额 |
| Button | btnClear | Text = 清除 |
| Label | lblResult | 显示计算结果;建议 AutoSize = True |
计算公式
subtotal = unitPrice * quantitydiscountAmount = subtotal * (discountPercent / 100D)afterDiscount = subtotal - discountAmounttaxAmount = afterDiscount * TaxRatefinalTotal = 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
清除按钮
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 逐步理解计算代码
Const TaxRate As Decimal = 0.06D 保存固定的示范税率。
TextBox.Text 是 String,因此使用 CDec 和 CInt 转换成可计算的数字。
程序使用乘法、除法、减法和加法依次得到各项金额。
(discountPercent / 100D) 先把百分数转换成比例。
使用 & 把标签文字、计算结果和换行符连接成完整输出。
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
6.13 初学者常见错误
把 Const 当变量修改
常量声明后不能再赋新值。如果值需要改变,就应该使用 Dim 声明变量。
百分比忘记除以 100
10% 在计算中通常应写成 10 / 100D,也就是 0.1。
/ 和 \ 混淆
/ 是一般除法;\ 是整数除法,会丢弃小数部分。
表达式没有括号
程序也许仍能运行,但复杂表达式如果缺少括号会更难阅读,也更容易写错。
6.14 小练习
- 加入 Const ServiceRate As Decimal = 0.02D,计算 2% 的示范服务费。
- 加入一个 Label,显示 finalTotal >= 100D 的 Boolean 结果。
- 计算数量除以 2 后的整数商和余数,分别练习 \ 与 Mod。
- 把最终输出第一行改为“购物金额计算结果”,并使用 & 连接。
- 尝试改变括号位置,观察表达式结果如何改变,并解释原因。
本课复习
- Const 与 Dim 有什么区别?
- / 和 \ 的区别是什么?
- Mod 的作用是什么?
- 比较表达式的结果通常是什么数据类型?
- AndAlso 与 OrElse 分别表示什么?
- 为什么字符串连接推荐使用 &?
- 括号如何影响运算顺序?
- 为什么金额计算通常适合使用 Decimal?