本课学习目标
- 理解什么是方法(Method),以及方法调用的基本结构。
- 区分对象方法与 Math 类的共享方法。
- 使用 Math.Abs 取得绝对值。
- 使用 Math.Round 进行四舍五入。
- 使用 Math.Max 与 Math.Min 比较数值。
- 使用 Math.Sqrt 与 Math.Pow。
- 理解 Math.Floor、Math.Ceiling 与 Math.Truncate 的差别。
- 完成一个整合多种 Math 方法的数学工具箱。
10.1 什么是方法?
方法(Method)可以理解为“某个对象或类型能够执行的操作”。程序调用方法时,就是要求它完成一项工作。
你其实已经使用过很多方法:
txtName.Clear()
txtName.Focus()
txtName.Text.Trim()
number.ToString()
Clear()清除内容
TextBox 的方法,用来清除当前文字。
Focus()取得输入焦点
让指定控件成为当前键盘输入目标。
Trim()移除前后空格
String 的方法,会返回去掉前后空格的新字符串。
ToString()转换成字符串
很多 .NET 类型都提供这个方法。
10.2 看懂方法调用
对象或类型.方法名称(参数)
例如:
txtName.Clear()
可以读成:“请 txtName 执行 Clear 方法。”
再看:
Math.Round(12.3456, 2)
这里:
10.3 什么是 Math 类?
Math 是 .NET 提供的数学类,里面包含许多常用数学方法和常量。使用它时通常不需要先建立 Math 对象,可以直接调用:
Dim result As Double = Math.Sqrt(81)
这里直接用:
Math.Sqrt(...)
而不是先写:
Dim myMath As New Math()
因为 Math 的这些常用成员属于共享(Shared)成员。
txtName.Clear() 作用在某个具体 TextBox 对象上。
Math.Sqrt(81) 直接通过 Math 类调用,不需要建立 Math 实例。
10.4 Math.Abs:绝对值
绝对值表示一个数与 0 的距离,不考虑正负号:
Dim result1 As Integer = Math.Abs(-25)
Dim result2 As Double = Math.Abs(-3.75)
结果:
- result1 = 25
- result2 = 3.75
例如计算两个温度之间的差:
Dim temperature1 As Double = 30.5
Dim temperature2 As Double = 24.2
Dim difference As Double = Math.Abs(temperature1 - temperature2)
10.5 Math.Round:四舍五入
使用 Math.Round 可以把数值舍入到指定小数位数:
Dim value As Double = 12.3456
Dim result1 As Double = Math.Round(value, 2)
Dim result2 As Double = Math.Round(value, 1)
常见结果:
- 保留两位小数 → 12.35
- 保留一位小数 → 12.3
10.6 Math.Max 与 Math.Min
要比较两个值,可以使用:
Dim highest As Integer = Math.Max(85, 92)
Dim lowest As Integer = Math.Min(85, 92)
结果:
- highest = 92
- lowest = 85
例如比较两个商品价格:
Dim priceA As Decimal = 19.9D
Dim priceB As Decimal = 25.5D
Dim higherPrice As Decimal = Math.Max(priceA, priceB)
10.7 Math.Sqrt:平方根
Math.Sqrt 用来计算平方根:
Dim answer As Double = Math.Sqrt(81)
结果为 9,因为:
9 × 9 = 81
另一个例子:
Dim answer As Double = Math.Sqrt(2)
lblResult.Text = answer.ToString("N4")
可显示约:
1.4142
10.8 Math.Pow:乘方
Math.Pow(base, exponent) 用来计算乘方:
Dim result As Double = Math.Pow(2, 3)
表示:
2³ = 2 × 2 × 2 = 8
例如:
Dim square As Double = Math.Pow(5, 2)
Dim cube As Double = Math.Pow(5, 3)
10.9 Floor、Ceiling 与 Truncate
这三个方法都会处理小数,但行为不同:
| 方法 | 12.8 的结果 | -12.8 的结果 | 意义 |
|---|---|---|---|
| Math.Floor | 12 | -13 | 向负无穷方向取整 |
| Math.Ceiling | 13 | -12 | 向正无穷方向取整 |
| Math.Truncate | 12 | -12 | 直接去掉小数部分,向 0 靠近 |
Dim value As Double = 12.8
Dim floorValue As Double = Math.Floor(value)
Dim ceilingValue As Double = Math.Ceiling(value)
Dim truncatedValue As Double = Math.Truncate(value)
10.10 Math.PI 与 Math.E
Math 类也提供常用数学常量:
Dim piValue As Double = Math.PI
Dim eValue As Double = Math.E
例如计算圆面积:
Dim radius As Double = 5
Dim area As Double = Math.PI * Math.Pow(radius, 2)
圆面积公式:
面积 = π × 半径²
10.11 实作:数学工具箱
建立新的 Windows Forms 项目:
MathToolbox2026
这个程序让用户输入两个数值,然后选择不同数学运算。为了让界面简单,本课使用多个按钮。
较大值:25.60
较小值:9.00
A 的平方根:5.06
加入以下控件:
| 控件 | Name | Text / 用途 |
|---|---|---|
| Form | Form1 | Text = 数学工具箱 |
| TextBox | txtValueA | 输入数值 A |
| TextBox | txtValueB | 输入数值 B |
| Button | btnAbs | Text = 绝对值 |
| Button | btnMaxMin | Text = 最大/最小 |
| Button | btnSqrt | Text = 平方根 |
| Button | btnPower | Text = A 的 B 次方 |
| Button | btnRound | Text = 舍入 A |
| Button | btnClear | Text = 清除 |
| Label | lblResult | 显示结果;建议 AutoSize = True |
绝对值按钮
Private Sub btnAbs_Click(sender As Object, e As EventArgs) Handles btnAbs.Click
Dim valueA As Double = CDbl(txtValueA.Text)
Dim result As Double = Math.Abs(valueA)
lblResult.Text = "A 的绝对值:" & result.ToString("N2")
End Sub
最大值与最小值按钮
Private Sub btnMaxMin_Click(sender As Object, e As EventArgs) _
Handles btnMaxMin.Click
Dim valueA As Double = CDbl(txtValueA.Text)
Dim valueB As Double = CDbl(txtValueB.Text)
Dim highest As Double = Math.Max(valueA, valueB)
Dim lowest As Double = Math.Min(valueA, valueB)
lblResult.Text =
"较大值:" & highest.ToString("N2") & Environment.NewLine &
"较小值:" & lowest.ToString("N2")
End Sub
平方根按钮
Private Sub btnSqrt_Click(sender As Object, e As EventArgs) Handles btnSqrt.Click
Dim valueA As Double = CDbl(txtValueA.Text)
If valueA < 0 Then
lblResult.Text = "平方根输入必须大于或等于 0。"
Exit Sub
End If
Dim result As Double = Math.Sqrt(valueA)
lblResult.Text = "A 的平方根:" & result.ToString("N4")
End Sub
乘方按钮
Private Sub btnPower_Click(sender As Object, e As EventArgs) Handles btnPower.Click
Dim valueA As Double = CDbl(txtValueA.Text)
Dim valueB As Double = CDbl(txtValueB.Text)
Dim result As Double = Math.Pow(valueA, valueB)
lblResult.Text = "A 的 B 次方:" & result.ToString("N4")
End Sub
舍入按钮
Private Sub btnRound_Click(sender As Object, e As EventArgs) Handles btnRound.Click
Dim valueA As Double = CDbl(txtValueA.Text)
Dim roundedValue As Double = Math.Round(valueA, 2)
lblResult.Text =
"原数值:" & valueA.ToString("N4") & Environment.NewLine &
"舍入到两位小数:" & roundedValue.ToString("N2") & Environment.NewLine &
"Floor:" & Math.Floor(valueA).ToString() & Environment.NewLine &
"Ceiling:" & Math.Ceiling(valueA).ToString() & Environment.NewLine &
"Truncate:" & Math.Truncate(valueA).ToString()
End Sub
清除按钮
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
txtValueA.Clear()
txtValueB.Clear()
lblResult.Text = ""
txtValueA.Focus()
End Sub
10.12 逐步理解 Math 方法调用
TextBox.Text 是 String,所以使用 CDbl 转换成 Double。
根据功能调用 Abs、Max、Min、Sqrt、Pow 或 Round。
例如 Math.Pow(valueA, valueB) 需要底数和指数两个参数。
Math 方法通常返回结果,因此可以把结果存入变量。
使用 ToString("N2") 或 ToString("N4") 控制显示的小数位数。
10.13 方法与属性有什么不同?
描述对象的状态或资料,例如 txtName.Text、btnSave.Enabled。
表示对象或类型能够执行的动作,例如 txtName.Clear()、Math.Sqrt(81)。
一个简单记法:
属性 = 它是什么 / 它目前有什么值
|
方法 = 它能做什么
10.14 初学者常见错误
忘记方法括号
方法调用通常带括号,例如 txtName.Clear(),不要把它误写成属性访问。
Sqrt 输入负数
实数平方根示例应先检查输入是否 ≥ 0。
把 Round 当显示格式
Math.Round 返回舍入后的数值;ToString("N2") 主要负责显示格式。
Floor 与 Truncate 混淆
对负数时差别最明显:Floor(-12.8) 是 -13,而 Truncate(-12.8) 是 -12。
10.15 小练习
- 加入“圆面积”按钮:读取 A 作为半径,使用 Math.PI * Math.Pow(valueA, 2)。
- 加入“圆周长”按钮:使用 2 * Math.PI * valueA。
- 让程序显示 A 与 B 的差距:Math.Abs(valueA - valueB)。
- 新增“向下 / 向上取整”按钮,并测试正数与负数。
- 输入 2 和 10,使用 Math.Pow 计算 2¹⁰。
- 输入 144,确认 Math.Sqrt 返回 12。
本课复习
- 什么是方法?它和属性有什么不同?
- Math.Abs(-25) 的结果是什么?
- Math.Round(value, 2) 中的 2 表示什么?
- Math.Max 和 Math.Min 分别做什么?
- Math.Sqrt(81) 的结果是什么?
- Math.Pow(2, 3) 的结果是什么?
- Floor、Ceiling 与 Truncate 对 -12.8 的结果为什么不同?
- Math.PI 可以用于哪一类计算?