Menu
CoddyTech

Định dạng với sprintf()

Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 2 trên 64.

sprintf() tạo chuỗi từ một mẫu. Mỗi chỗ giữ chỗ % được thay bằng đối số tiếp theo: %s dành cho văn bản, %d dành cho số nguyên và %f dành cho số thực.

name <- "Ada"
age <- 36
print(sprintf("%s is %d years old", name, age))

Đầu ra:

[1] "Ada is 36 years old"

%d chỉ chấp nhận số nguyên: sprintf("%d", 2.5) sẽ dừng và báo lỗi.

Độ chính xác giữa % và f đặt số chữ số thập phân, vì vậy %.2f làm tròn đến hai chữ số:

total <- 3 * 4.5 * 1.2
print(sprintf("Total: %.2f", total))

Đầu ra:

[1] "Total: 16.20"

Độ rộng sẽ đệm giá trị bằng khoảng trắng để đạt số ký tự đó: %5d đệm bên trái, %-6s đệm bên phải và %03d đệm bằng các số 0. %% in ra dấu phần trăm.

print(sprintf("[%5d]", 42))
print(sprintf("[%-6s]", "tea"))
print(sprintf("%03d", 7))
print(sprintf("%d%%", 85))

Đầu ra:

[1] "[   42]"
[1] "[tea   ]"
[1] "007"
[1] "85%"

sprintf() được vector hóa: với các đối số dạng vector, hàm trả về một chuỗi cho mỗi phần tử. cat() với sep = "\n" in mỗi chuỗi trên một dòng riêng.

items <- c("tea", "cake")
prices <- c(4, 12.5)
lines <- sprintf("%-5s %6.2f", items, prices)
cat(lines, sep = "\n")

Đầu ra:

tea     4.00
cake   12.50
challenge icon

Thử thách

Dễ

Hoàn thiện receipt_line(item, qty, price). Trả về mặt hàng, số lượng và tổng tiền của mặt hàng đó (qty * price) theo định dạng tea x3 = 13.50: mặt hàng, một dấu cách, x theo sau là số lượng, rồi đến = và tổng tiền với đúng hai chữ số thập phân.

Code được cung cấp đọc mặt hàng, số lượng và giá (mỗi giá trị trên một dòng), rồi in ra giá trị trả về.

Tự làm thử

receipt_line <- function(item, qty, price) {
  # Viết code của bạn tại đây
  ""
}

# Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(receipt_line(input[1], as.integer(input[2]), as.numeric(input[3])), sep = "\n")
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch R online