Ce face String.format
"%.2f lei".format(suma) pune valoarea suma în locul marcajului %.2f, rotunjită la două zecimale. Marcajele cele mai folosite: %s (text), %d (număr întreg), %f (zecimal), %5d (lățime de 5 caractere), %05d (cu zerouri în față), %-10s (aliniat la stânga). Pentru % literal scrii %%.
Funcția folosește regulile lui java.util.Formatter și limba implicită a sistemului: pe un calculator setat în română, %.2f poate afișa virgulă zecimală. Pentru un rezultat identic peste tot, dă un Locale ca prim argument: "%.2f".format(Locale.ROOT, x).
Se poate scrie și String.format("%d", n), ca în Java. Pentru afișări simple, string templates sunt suficiente; format este util când ai nevoie de zecimale fixe sau coloane aliniate.
Parametri
| Parametru | Descriere |
|---|---|
locale |
Opțional: regulile de formatare (separator zecimal, de mii). |
args |
Valorile puse, în ordine, în locul marcajelor. |
Ce returnează
Textul formatat (String).
Exemple
Exemplul 1: Zecimale fixe și Locale
Locale.ROOT folosește punct zecimal, iar Locale.forLanguageTag("ro-RO") folosește regulile românești: virgulă zecimală și punct pentru mii.
import java.util.Locale
fun main() {
val total = 1234.5678
println("%.2f lei".format(Locale.ROOT, total))
println("%,.2f lei".format(Locale.forLanguageTag("ro-RO"), total))
println("%.0f%%".format(Locale.ROOT, 87.6))
}
Rezultat
1234.57 lei
1.234,57 lei
88%
Exemplul 2: Tabel cu coloane aliniate
%-10s aliniază numele la stânga pe 10 caractere, iar %3d nota la dreapta pe 3.
fun main() {
val elevi = listOf("Ana" to 10, "Constantin" to 9, "Ion" to 7)
println(String.format("%-10s %4s", "Nume", "Nota"))
for ((nume, nota) in elevi) {
println(String.format("%-10s %4d", nume, nota))
}
}
Rezultat
Nume Nota
Ana 10
Constantin 9
Ion 7
Exemplul 3: Mai multe valori și zerouri în față
Marcajele se completează în ordine; %05d completează numărul cu zerouri până la 5 cifre.
fun main() {
val nume = "Maria"
val comanda = 42
val produse = 3
println("Comanda #%05d: %s a cumpărat %d produse".format(comanda, nume, produse))
}
Rezultat
Comanda #00042: Maria a cumpărat 3 produse
Greșeli frecvente
- Dai un
Intpentru%fsau unDoublepentru%d. Tipurile trebuie să se potrivească; altfel primeștiIllegalFormatConversionException. - Te bazezi pe punctul zecimal în
%.2ffără Locale. Pe alt calculator rezultatul poate avea virgulă; dăLocale.ROOTdacă textul este citit de alt program.
Comenzi înrudite
String.padStart: Completează textul la o lungime dată, adăugând un caracter la început (padStart) sau la final (padEnd).String templates ($nume, ${expresie}): Pun valoarea unei variabile sau a unei expresii direct în text, cu $nume sau ${expresie}.println: Afișează o valoare pe ecran: println trece apoi la rând nou, print rămâne pe același rând.round: Rotunjesc un număr zecimal: round la cel mai apropiat întreg, floor în jos, ceil în sus, truncate taie zecimalele.