Skip to Content
Kotlin📘 Ngôn ngữ Kotlin➕ Toán tử Số học

Các Toán tử Số học trong Kotlin

🎯 Mục tiêu: Nắm vững các phép toán số học cơ bản và nâng cao trong Kotlin.


💡 Tổng quan toán tử

Toán tửTênVí dụKết quả
+Cộng5 + 38
-Trừ5 - 32
*Nhân5 * 315
/Chia5 / 31 (Int)
%Chia lấy dư5 % 32
val a = 10 val b = 3 println(a + b) // 13 println(a - b) // 7 println(a * b) // 30 println(a / b) // 3 (chia số nguyên) println(a % b) // 1

📝 Phép chia - Cẩn thận!

Chia số nguyên vs số thực

// Số nguyên / Số nguyên = Số nguyên (bỏ phần thập phân) println(7 / 2) // 3 (không phải 3.5!) // Có ít nhất 1 số thực = Số thực println(7.0 / 2) // 3.5 println(7 / 2.0) // 3.5 println(7.0 / 2.0) // 3.5 // Convert để có kết quả chính xác val a = 7 val b = 2 println(a.toDouble() / b) // 3.5

Chia cho 0

// Số nguyên chia 0 = Exception // val error = 10 / 0 // ❌ ArithmeticException // Số thực chia 0 = Infinity hoặc NaN println(10.0 / 0.0) // Infinity println(-10.0 / 0.0) // -Infinity println(0.0 / 0.0) // NaN

📊 Toán tử gán kết hợp

var x = 10 x += 5 // x = x + 5 → 15 x -= 3 // x = x - 3 → 12 x *= 2 // x = x * 2 → 24 x /= 4 // x = x / 4 → 6 x %= 4 // x = x % 4 → 2 println(x) // 2

⬆️ Toán tử tăng/giảm

Prefix vs Postfix

var a = 5 var b = 5 // Postfix (a++) - trả về giá trị CŨ, rồi tăng println(a++) // In 5, sau đó a = 6 // Prefix (++b) - tăng trước, rồi trả về giá trị MỚI println(++b) // Tăng thành 6, in 6

Trong biểu thức

var count = 0 // Postfix val result1 = count++ * 2 // result1 = 0, count = 1 // Prefix val result2 = ++count * 2 // count = 2, result2 = 4

🔢 Phép toán với kiểu dữ liệu khác nhau

Type promotion

val intVal = 10 val longVal = 20L val doubleVal = 3.14 // Int + Long = Long val result1 = intVal + longVal // Long: 30 // Int + Double = Double val result2 = intVal + doubleVal // Double: 13.14 // Với Byte, Short cần convert val byte: Byte = 10 val short: Short = 20 val sum = byte + short // Int (không phải Byte hay Short)

🧮 Các hàm toán học (kotlin.math)

import kotlin.math.* fun main() { // Lũy thừa println(2.0.pow(10)) // 1024.0 // Căn bậc hai println(sqrt(16.0)) // 4.0 // Giá trị tuyệt đối println(abs(-5)) // 5 // Làm tròn println(round(3.7)) // 4.0 println(floor(3.7)) // 3.0 (xuống) println(ceil(3.2)) // 4.0 (lên) // Min, Max println(max(10, 20)) // 20 println(min(10, 20)) // 10 // Hằng số println(PI) // 3.141592653589793 println(E) // 2.718281828459045 }

⚡ Kotlin Extensions hữu ích

fun main() { // coerceIn - giới hạn giá trị val score = 150 val validScore = score.coerceIn(0, 100) println(validScore) // 100 // coerceAtLeast / coerceAtMost val age = -5 println(age.coerceAtLeast(0)) // 0 val quantity = 15 println(quantity.coerceAtMost(10)) // 10 // Ranges println(5 in 1..10) // true println(15 in 1..10) // false }

🎲 Thứ tự ưu tiên toán tử

Từ cao đến thấp:

  1. () - Dấu ngoặc
  2. ++, -- - Tăng/giảm
  3. *, /, % - Nhân, chia
  4. +, - - Cộng, trừ
  5. +=, -=, etc. - Gán kết hợp
val result = 2 + 3 * 4 // 14 (không phải 20) val result2 = (2 + 3) * 4 // 20

🛠️ Thực hành

Bài tập 1: Tính tiền taxi

fun main() { val baseFare = 15000 // Giá mở cửa val pricePerKm = 5000 // Giá mỗi km val distance = 7.5 // Quãng đường (km) // TODO: Tính tổng tiền }

Lời giải:

fun main() { val baseFare = 15000 val pricePerKm = 5000 val distance = 7.5 val total = baseFare + (pricePerKm * distance) println("Tổng tiền: ${"%,.0f".format(total)} VNĐ") // Output: Tổng tiền: 52,500 VNĐ }

Bài tập 2: Đổi giây thành giờ:phút:giây

fun main() { val totalSeconds = 3725 // Tổng số giây // TODO: Tính giờ, phút, giây // TODO: In ra dạng "1:02:05" }

Lời giải:

fun main() { val totalSeconds = 3725 val hours = totalSeconds / 3600 val minutes = (totalSeconds % 3600) / 60 val seconds = totalSeconds % 60 println("$hours:${"%02d".format(minutes)}:${"%02d".format(seconds)}") // Output: 1:02:05 }

Bài tập 3: Tính lãi suất kép

fun main() { val principal = 10_000_000.0 // Vốn gốc val rate = 0.08 // Lãi suất 8%/năm val years = 5 // Số năm // TODO: Tính tổng tiền sau n năm // Công thức: A = P * (1 + r)^n }

Lời giải:

import kotlin.math.pow fun main() { val principal = 10_000_000.0 val rate = 0.08 val years = 5 val amount = principal * (1 + rate).pow(years) val interest = amount - principal println("Vốn gốc: ${"%,.0f".format(principal)} VNĐ") println("Tổng sau $years năm: ${"%,.0f".format(amount)} VNĐ") println("Lãi: ${"%,.0f".format(interest)} VNĐ") }

Output:

Vốn gốc: 10,000,000 VNĐ Tổng sau 5 năm: 14,693,281 VNĐ Lãi: 4,693,281 VNĐ

📱 Trong Android

// Tính kích thước val widthDp = 200 val density = resources.displayMetrics.density val widthPx = (widthDp * density).toInt() // Tính phần trăm val downloaded = 750 val total = 1000 val percent = (downloaded * 100) / total progressBar.progress = percent // Animation duration val baseDuration = 300 val distance = 500 val adjustedDuration = baseDuration + (distance / 10)

⚠️ Lưu ý quan trọng

[!WARNING] Integer overflow không báo lỗi:

val max = Int.MAX_VALUE // 2147483647 println(max + 1) // -2147483648 (overflow!)

[!TIP] Để tính toán chính xác với tiền tệ:

import java.math.BigDecimal val price = BigDecimal("19.99") val quantity = BigDecimal("3") val total = price * quantity // 59.97 (chính xác)

✅ Checklist - Tự kiểm tra

Sau bài học này, bạn có thể:

  • Sử dụng 5 toán tử cơ bản: +, -, *, /, %
  • Hiểu sự khác biệt giữa chia số nguyên và số thực
  • Sử dụng toán tử gán kết hợp: +=, -=, *=, /=
  • Phân biệt prefix (++x) và postfix (x++)
  • Sử dụng các hàm từ kotlin.math
  • Áp dụng coerceIn() để giới hạn giá trị

Tiếp theo: Toán tử quan hệ/so sánh

Last updated on