Bỏ qua để đến nội dung

➕ 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.


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 = 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

// 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
// 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

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

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
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

Phần tiêu đề “🔢 Phép toán với kiểu dữ liệu khác nhau”
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)

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
}

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
}

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

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Đ

// 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)


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