➕ Toán tử Số học
🎯 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ử
Phần tiêu đề “💡 Tổng quan toán tử”| Toán tử | Tên | Ví dụ | Kết quả |
|---|---|---|---|
+ |
Cộng | 5 + 3 |
8 |
- |
Trừ | 5 - 3 |
2 |
* |
Nhân | 5 * 3 |
15 |
/ |
Chia | 5 / 3 |
1 (Int) |
% |
Chia lấy dư | 5 % 3 |
2 |
val a = 10val b = 3
println(a + b) // 13println(a - b) // 7println(a * b) // 30println(a / b) // 3 (chia số nguyên)println(a % b) // 1📝 Phép chia - Cẩn thận!
Phần tiêu đề “📝 Phép chia - Cẩn thận!”Chia số nguyên vs số thực
Phần tiêu đề “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ựcprintln(7.0 / 2) // 3.5println(7 / 2.0) // 3.5println(7.0 / 2.0) // 3.5
// Convert để có kết quả chính xácval a = 7val b = 2println(a.toDouble() / b) // 3.5Chia cho 0
Phần tiêu đề “Chia cho 0”// Số nguyên chia 0 = Exception// val error = 10 / 0 // ❌ ArithmeticException
// Số thực chia 0 = Infinity hoặc NaNprintln(10.0 / 0.0) // Infinityprintln(-10.0 / 0.0) // -Infinityprintln(0.0 / 0.0) // NaN📊 Toán tử gán kết hợp
Phần tiêu đề “📊 Toán tử gán kết hợp”var x = 10
x += 5 // x = x + 5 → 15x -= 3 // x = x - 3 → 12x *= 2 // x = x * 2 → 24x /= 4 // x = x / 4 → 6x %= 4 // x = x % 4 → 2
println(x) // 2⬆️ Toán tử tăng/giảm
Phần tiêu đề “⬆️ Toán tử tăng/giảm”Prefix vs Postfix
Phần tiêu đề “Prefix vs Postfix”var a = 5var b = 5
// Postfix (a++) - trả về giá trị CŨ, rồi tăngprintln(a++) // In 5, sau đó a = 6
// Prefix (++b) - tăng trước, rồi trả về giá trị MỚIprintln(++b) // Tăng thành 6, in 6Trong biểu thức
Phần tiêu đề “Trong biểu thức”var count = 0
// Postfixval result1 = count++ * 2 // result1 = 0, count = 1
// Prefixval result2 = ++count * 2 // count = 2, result2 = 4🔢 Phép toán với kiểu dữ liệu khác nhau
Phần tiêu đề “🔢 Phép toán với kiểu dữ liệu khác nhau”Type promotion
Phần tiêu đề “Type promotion”val intVal = 10val longVal = 20Lval doubleVal = 3.14
// Int + Long = Longval result1 = intVal + longVal // Long: 30
// Int + Double = Doubleval result2 = intVal + doubleVal // Double: 13.14
// Với Byte, Short cần convertval byte: Byte = 10val short: Short = 20val sum = byte + short // Int (không phải Byte hay Short)🧮 Các hàm toán học (kotlin.math)
Phần tiêu đề “🧮 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
Phần tiêu đề “⚡ 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ử
Phần tiêu đề “🎲 Thứ tự ưu tiên toán tử”Từ cao đến thấp:
()- Dấu ngoặc++,--- Tăng/giảm*,/,%- Nhân, chia+,-- Cộng, trừ+=,-=, 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
Phần tiêu đề “🛠️ 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
Phần tiêu đề “📱 Trong Android”// Tính kích thướcval widthDp = 200val density = resources.displayMetrics.densityval widthPx = (widthDp * density).toInt()
// Tính phần trămval downloaded = 750val total = 1000val percent = (downloaded * 100) / totalprogressBar.progress = percent
// Animation durationval baseDuration = 300val distance = 500val adjustedDuration = baseDuration + (distance / 10)⚠️ Lưu ý quan trọng
Phần tiêu đề “⚠️ Lưu ý quan trọng”✅ Checklist - Tự kiểm tra
Phần tiêu đề “✅ 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