Zahlen formatieren
Mit .. kannst du jede Zeile bauen, aber Zahlen sehen nicht immer so aus, wie du willst. Ein Preis von 2.5 Münzen wird als 2.5 ausgegeben, nicht als 2.50, und eine Division, die aufgeht, gibt 5.0 aus. Die Funktion string.format gibt dir die Kontrolle. Du gibst ihr eine Vorlage, einen Text mit Platzhaltern, die Formatangaben heißen, und die Werte, die dort eingesetzt werden sollen:
local ware = "Kürbisse"
local anzahl = 3
local preis = 2.5
print(string.format("%d %s für %.2f Münzen", anzahl, ware, preis))Das gibt Folgendes aus:
3 Kürbisse für 2.50 MünzenJede Formatangabe beginnt mit %:
%dist eine ganze Zahl,%.2fist eine Dezimalzahl mit 2 Nachkommastellen, gerundet (%.1fergibt eine),%sist ein beliebiger Wert als Text: ein String, eine Zahl,true,nil…,%%ist ein Prozentzeichen.
Die Werte füllen die Formatangaben der Reihe nach: Der erste Wert kommt in die erste, der zweite in die zweite und so weiter.
string.format gibt selbst nichts aus. Es liefert den fertigen Text, den du ausgibst oder in einer Variablen speicherst:
local gesamt = 10 / 4
local zeile = string.format("Gesamt: %.2f Münzen", gesamt)
print(zeile)
print(string.format("%d Eier", 10 / 2))
print(string.format("%d%% verkauft", 75))Das gibt Folgendes aus:
Gesamt: 2.50 Münzen
5 Eier
75% verkauft%d hat 5.0 als 5 ausgegeben: Es akzeptiert einen Float, solange er ganzzahlig ist. Wenn nicht, meldet Lua einen Fehler:
print(string.format("%d Münzen", 3.5))Lua meldet:
main.lua:1: bad argument #2 to 'format' (number has no integer representation)Bad argument #2 bedeutet, dass der zweite Wert, den du an format übergeben hast, falsch ist (die Vorlage ist der erste). Number has no integer representation: 3.5 lässt sich nicht als ganze Zahl schreiben. Nimm %.2f oder runde die Zahl zuerst, zum Beispiel mit math.floor.
Wenn ein Wert fehlt, bekommst du einen ähnlichen Fehler: string.format("%s und %s", "Emma") endet mit bad argument #3 to 'format' (no value), weil es keinen dritten Wert gibt.
So schreibst du es:
Anweisungen
- 1
Führe das Programm aus. Die erste Zeile wird ausgegeben, aber die zweite endet mit einem Fehler:
gesamtist 13.5, und%dnimmt nur ganze Zahlen. Ändere die Formatangabe so, dass die Summe mit zwei Nachkommastellen ausgegeben wird:3 Schachteln Erdbeeren Gesamt: 13.50 Münzen - 2
Der Händler Hugo zahlt nur in ganzen Münzen und rundet ab. Gib in der nächsten Zeile aus, was er zahlt: Benutze
%dundmath.floor:3 Schachteln Erdbeeren Gesamt: 13.50 Münzen Hugo zahlt: 13 Münzen - 3
Gib zum Schluss eine Zeile für Emmas Notizbuch mit einem
string.formataus:%sfür die Ware,%dfür die Schachteln und%.2ffür den Schachtelpreis und für die Summe:3 Schachteln Erdbeeren Gesamt: 13.50 Münzen Hugo zahlt: 13 Münzen Erdbeeren: 3 x 4.50 = 13.50