Menu
Coddy logo textTech

Formatierung mit sprintf()

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 2 von 64.

sprintf() erstellt eine Zeichenkette aus einer Vorlage. Jeder Platzhalter % wird durch das nächste Argument ersetzt: %s für Text, %d für ganze Zahlen und %f für Dezimalzahlen.

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

Ausgabe:

[1] "Ada is 36 years old"

%d akzeptiert nur ganze Zahlen: sprintf("%d", 2.5) wird mit einem Fehler beendet.

Eine Genauigkeit zwischen % und f legt die Anzahl der Dezimalstellen fest, daher rundet %.2f auf zwei Stellen:

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

Ausgabe:

[1] "Total: 16.20"

Eine Breite füllt den Wert auf diese Anzahl von Zeichen auf: %5d fügt links Leerzeichen hinzu, %-6s fügt rechts Leerzeichen hinzu und %03d füllt mit Nullen auf. %% gibt ein Prozentzeichen aus.

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

Ausgabe:

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

sprintf() ist vektorisiert: Mit Vektorargumenten gibt es eine Zeichenkette pro Element zurück. cat() mit sep = "\n" gibt jede Zeichenkette in einer eigenen Zeile aus.

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

Ausgabe:

tea     4.00
cake   12.50
challenge icon

Aufgabe

Einfach

Vervollständige receipt_line(item, qty, price). Gib das Produkt, die Menge und die Zeilensumme (qty * price) im Format tea x3 = 13.50 zurück: das Produkt, ein Leerzeichen, x gefolgt von der Menge, dann = und die Summe mit genau zwei Dezimalstellen.

Der bereitgestellte Code liest das Produkt, die Menge und den Preis (jeweils eine Angabe pro Zeile) ein und gibt den zurückgegebenen Wert aus.

Probier es selbst

receipt_line <- function(item, qty, price) {
  # Schreibe deinen Code hier
  ""
}

# Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(receipt_line(input[1], as.integer(input[2]), as.numeric(input[3])), sep = "\n")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler