VB.NET 整數(Integer) 筆記(基礎篇)
Integer 是 VB.NET 中最常用的整數型別,適合保存沒有小數的數量,例如件數、頁數、次數、索引、庫存、分數與計算結果。
整數的重點不只是能加減乘除,還包含範圍限制、整除與餘數、使用者輸入轉型、除以 0 檢查,以及運算結果是否可能超出型別可保存範圍。只要資料來自 TextBox,通常就應先用 Integer.TryParse 驗證,再進行後續計算。
先理解 Integer 的用途與範圍
Integer:32 位元有號整數型別,可保存沒有小數的正數、負數與 0。可用範圍是 -2,147,483,648 到 2,147,483,647。
Integer 適合表示沒有小數的資料
- 數量:份數、頁數、箱數、張數。
- 計數:完成筆數、重試次數、排序位置。
- 索引:陣列位置、清單位置、目前第幾筆。
- 差額:庫存增減、剩餘數量、超出數量。
| 型別 | 範圍 | 適合情境 |
|---|---|---|
| Short | -32,768 到 32,767 | 很小範圍的整數資料。 |
| Integer | -2,147,483,648 到 2,147,483,647 | 一般整數計算最常用。 |
| Long | 比 Integer 更大的整數範圍。 | 大型編號、累計量或可能很大的數值。 |
基本宣告
Dim copyCount As Integer = 25
Dim retryCount As Integer = 0
Dim differenceValue As Integer = -3
Dim maxValue As Integer = Integer.MaxValue
算術運算、整除與餘數
場景一:手作材料包分裝
這個範例用材料包分裝來示範整數加減、整除與餘數。若每盒放 6 份材料,整除可算出完整盒數,Mod 可算出剩下幾份。
需要的主控項
TextBoxPackCount:輸入材料份數。ButtonPack:計算分裝結果。LabelPackResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonPack_Click(sender As Object, e As EventArgs) Handles ButtonPack.Click
Dim totalPacks As Integer
If Not Integer.TryParse(TextBoxPackCount.Text.Trim(), totalPacks) OrElse totalPacks < 0 Then
LabelPackResult.Text = "請輸入 0 以上的材料份數"
Return
End If
Dim perBox As Integer = 6
Dim fullBoxCount As Integer = totalPacks \ perBox
Dim leftoverCount As Integer = totalPacks Mod perBox
LabelPackResult.Text = "完整盒數:" & fullBoxCount.ToString() & vbCrLf &
"剩餘份數:" & leftoverCount.ToString()
End Sub
End Class
邏輯解析
\是整數除法,只取整數商。Mod會取得餘數,適合分組、輪替與檢查倍數。- 份數沒有小數,因此適合使用
Integer。
| 運算子 | 用途 | 範例 |
|---|---|---|
| + | 加法。 | 8 + 3 = 11 |
| - | 減法。 | 8 - 3 = 5 |
| * | 乘法。 | 8 * 3 = 24 |
| \ | 整數除法。 | 8 \ 3 = 2 |
| Mod | 取得餘數。 | 8 Mod 3 = 2 |
比較判斷與門檻檢查
場景二:飲水機杯架補杯提醒
整數常用來判斷數量是否低於門檻。這個範例用目前杯數與安全杯數比較,決定是否顯示補杯提醒。
需要的主控項
TextBoxCupCount:輸入目前杯數。ButtonCheckCup:檢查杯數。LabelCupResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonCheckCup_Click(sender As Object, e As EventArgs) Handles ButtonCheckCup.Click
Dim cupCount As Integer
If Not Integer.TryParse(TextBoxCupCount.Text.Trim(), cupCount) OrElse cupCount < 0 Then
LabelCupResult.Text = "請輸入正確杯數"
Return
End If
Dim safeLevel As Integer = 20
If cupCount < safeLevel Then
LabelCupResult.Text = "杯數不足,請補杯"
ElseIf cupCount = safeLevel Then
LabelCupResult.Text = "杯數剛好達到安全量"
Else
LabelCupResult.Text = "杯數充足"
End If
End Sub
End Class
邏輯解析
- 比較運算結果會形成
Boolean,再交給If判斷流程。 <、=、>適合處理門檻、上下限與分級判斷。- 輸入先驗證,再比較,避免非數字內容進入流程。
TryParse:把文字安全轉成整數
表單輸入本質是文字。 TextBox.Text 取得的是 String,即使看起來像數字,也必須先轉成 Integer 才能進行整數運算。
場景三:候補號碼輸入檢查
使用者輸入可能是空白、中文字、符號或超出整數範圍的內容。Integer.TryParse 能在轉換失敗時回傳 False,避免程式直接中斷。
需要的主控項
TextBoxWaitingNo:輸入候補號碼。ButtonReadWaitingNo:讀取號碼。LabelWaitingResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonReadWaitingNo_Click(sender As Object, e As EventArgs) Handles ButtonReadWaitingNo.Click
Dim waitingNo As Integer
Dim sourceText As String = TextBoxWaitingNo.Text.Trim()
If Not Integer.TryParse(sourceText, waitingNo) Then
LabelWaitingResult.Text = "候補號碼必須是整數"
Return
End If
If waitingNo <= 0 Then
LabelWaitingResult.Text = "候補號碼必須大於 0"
Return
End If
LabelWaitingResult.Text = "候補號碼:" & waitingNo.ToString("000")
End Sub
End Class
邏輯解析
Integer.TryParse轉換成功時會回傳True。- 轉換成功後,再檢查是否大於 0。
ToString("000")可把整數顯示成三位數格式。
| 方法 | 特性 | 適合情境 |
|---|---|---|
| Integer.TryParse | 成功或失敗用 True / False 表示。 | 使用者輸入、外部資料。 |
| Integer.Parse | 格式錯誤會拋出例外。 | 已確定格式正確的資料。 |
| CInt | 可把多種數值或文字轉成整數。 | 來源可信,且已掌握轉換規則。 |
CInt 與小數轉整數
場景四:評分平均轉成整數分
CInt 可以把數值轉成整數,但它不是單純刪掉小數。若要處理小數轉整數,必須清楚轉換規則,避免評分或金額結果和預期不同。
需要的主控項
ButtonConvertScore:轉換平均分數。LabelScoreResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonConvertScore_Click(sender As Object, e As EventArgs) Handles ButtonConvertScore.Click
Dim averageScore As Decimal = 82.6D
Dim roundedScore As Integer = CInt(averageScore)
LabelScoreResult.Text = "平均分數:" & averageScore.ToString("N1") & vbCrLf &
"整數分數:" & roundedScore.ToString()
End Sub
End Class
邏輯解析
CInt(82.6D)會轉成83。CInt不適合用來表達「一律無條件捨去」。- 若需要明確無條件捨去、無條件進位或四捨五入,應使用對應的數學方法,讓意圖更清楚。
溢位與安全運算
Integer 常見風險
- 超出範圍:運算結果可能大於
Integer.MaxValue或小於Integer.MinValue。 - 除以 0:整除或取餘時,除數不能是 0。
- 輸入未驗證:TextBox 內容不能直接當整數使用。
- 把金額小數用 Integer:金額與精確小數通常應使用
Decimal。
場景五:大型資料筆數加總
若加總結果可能超過 Integer 範圍,應使用 Long 承接結果。這個範例用兩批資料筆數相加,示範為什麼大型累計不一定適合直接用 Integer。
需要的主控項
ButtonSumRows:計算資料筆數。LabelRowsResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonSumRows_Click(sender As Object, e As EventArgs) Handles ButtonSumRows.Click
Dim firstFileRows As Integer = 1500000000
Dim secondFileRows As Integer = 900000000
Dim totalRows As Long = CLng(firstFileRows) + CLng(secondFileRows)
LabelRowsResult.Text = "總筆數:" & totalRows.ToString("N0")
End Sub
End Class
邏輯解析
2,400,000,000已超過Integer.MaxValue。- 先用
CLng轉成Long後再相加,可讓結果由較大範圍型別承接。 - 大型累計、流水號或資料量統計,應先評估是否需要
Long。
位元旗標:多個開關集中保存
場景六:文件審核功能權限
整數可以透過位元運算保存多個開關狀態。每個權限使用 1、2、4、8 這類值,透過 Or 組合,透過 And 檢查。
需要的主控項
ButtonCheckRight:檢查權限。LabelRightResult:顯示結果。
範例程式碼
Public Class Form1
Private Const RightView As Integer = 1
Private Const RightApprove As Integer = 2
Private Const RightArchive As Integer = 4
Private Sub ButtonCheckRight_Click(sender As Object, e As EventArgs) Handles ButtonCheckRight.Click
Dim currentRights As Integer = RightView Or RightArchive
Dim canArchive As Boolean = (currentRights And RightArchive) = RightArchive
If canArchive Then
LabelRightResult.Text = "權限檢查:可封存文件"
Else
LabelRightResult.Text = "權限檢查:不可封存文件"
End If
End Sub
End Class
邏輯解析
Or用來把多個旗標組合在同一個整數中。And用來檢查指定旗標是否存在。- 若旗標會成為正式資料模型,通常可改用
<Flags> Enum讓語意更清楚。
綜合應用:簡易整數計算
場景七:桌遊點數計算器
這個範例整合輸入驗證、運算符號判斷與除數檢查。整數計算器看似簡單,但正好可以看出 TryParse、Select Case 與除以 0 檢查的基本流程。
需要的主控項
TextBoxLeftScore:輸入左側點數。TextBoxRightScore:輸入右側點數。ComboBoxOperator:選擇+、-、*、\、Mod。ButtonCalculateScore:計算結果。LabelCalculateResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBoxOperator.Items.Clear()
ComboBoxOperator.Items.Add("+")
ComboBoxOperator.Items.Add("-")
ComboBoxOperator.Items.Add("*")
ComboBoxOperator.Items.Add("\")
ComboBoxOperator.Items.Add("Mod")
ComboBoxOperator.SelectedIndex = 0
End Sub
Private Sub ButtonCalculateScore_Click(sender As Object, e As EventArgs) Handles ButtonCalculateScore.Click
Dim leftScore As Integer
Dim rightScore As Integer
If Not Integer.TryParse(TextBoxLeftScore.Text.Trim(), leftScore) Then
LabelCalculateResult.Text = "左側點數格式錯誤"
Return
End If
If Not Integer.TryParse(TextBoxRightScore.Text.Trim(), rightScore) Then
LabelCalculateResult.Text = "右側點數格式錯誤"
Return
End If
Dim operatorText As String = ComboBoxOperator.SelectedItem.ToString()
Dim resultValue As Integer
Select Case operatorText
Case "+"
resultValue = leftScore + rightScore
Case "-"
resultValue = leftScore - rightScore
Case "*"
resultValue = leftScore * rightScore
Case "\"
If rightScore = 0 Then
LabelCalculateResult.Text = "整除時右側點數不可為 0"
Return
End If
resultValue = leftScore \ rightScore
Case "Mod"
If rightScore = 0 Then
LabelCalculateResult.Text = "取餘數時右側點數不可為 0"
Return
End If
resultValue = leftScore Mod rightScore
Case Else
LabelCalculateResult.Text = "運算符號無效"
Return
End Select
LabelCalculateResult.Text = "計算結果:" & resultValue.ToString()
End Sub
End Class
邏輯解析
- 兩個輸入都先使用
Integer.TryParse驗證。 Select Case依照運算符號選擇計算方式。\與Mod都需要檢查右側數值是否為 0。
實務判斷與常見誤區
常見問題整理
- 把 TextBox 文字直接拿來計算:應先使用
Integer.TryParse。 - 把小數資料放進 Integer:若需要小數或金額,通常應使用
Decimal。 - 忽略整除差異:
/與\不同,整數除法應使用\。 - 忘記除以 0 檢查:整除與取餘數都不能以 0 當除數。
- 大型累計仍用 Integer:可能超過範圍時,應改用
Long。 - 誤解 CInt:
CInt不是單純移除小數。
| 資料情境 | 建議型別 | 原因 |
|---|---|---|
| 一般數量、次數、索引 | Integer |
最直覺也最常用。 |
| 很小範圍整數 | Short 或 Byte |
需確定範圍真的很小。 |
| 大型累計、很大編號 | Long |
避免超出 Integer 範圍。 |
| 金額、折扣、小數 | Decimal |
需要精確小數。 |
重點整理
Integer適合保存沒有小數的一般整數資料。Integer的範圍是-2,147,483,648到2,147,483,647。- 一般數量、次數、頁數、索引與門檻判斷通常適合使用
Integer。 \是整數除法,Mod可取得餘數。- 表單輸入轉整數時,建議使用
Integer.TryParse。 CInt可轉成整數,但不是單純捨去小數。- 大型累計可能超過 Integer 範圍時,應使用
Long。 - 若資料需要小數或金額計算,通常應改用
Decimal。