Ce face NumberFormat.getCurrencyInstance
NumberFormat.getCurrencyInstance(locale) returnează un formatator pentru bani: pune numărul de zecimale potrivit monedei (2 pentru leu și euro), separatorii corecți și simbolul monedei în locul obișnuit pentru acea țară.
Moneda vine din țara din Locale: pentru ro-RO este leul (RON). Ca să afișezi euro după regulile românești, schimbi moneda cu setCurrency(Currency.getInstance("EUR")). Între număr și simbol se pune un spațiu special care nu se rupe (U+00A0), ca suma să rămână pe un singur rând.
Parametri
| Parametru | Descriere |
|---|---|
locale |
Opțional: țara ale cărei reguli și monedă se folosesc. |
Ce returnează
Un NumberFormat pentru bani.
Exemple
Exemplul 1: Aceeași sumă în mai multe țări
import java.text.NumberFormat;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
double suma = 1234.5;
System.out.println(NumberFormat.getCurrencyInstance(Locale.of("ro", "RO")).format(suma));
System.out.println(NumberFormat.getCurrencyInstance(Locale.US).format(suma));
System.out.println(NumberFormat.getCurrencyInstance(Locale.GERMANY).format(suma));
System.out.println(NumberFormat.getCurrencyInstance(Locale.UK).format(suma));
}
}
Rezultat
1.234,50 RON
$1,234.50
1.234,50 €
£1,234.50
Exemplul 2: Euro după regulile românești
Formatatorul românesc afișează lei; cu setCurrency îl facem să afișeze euro, păstrând separatorii românești.
import java.text.NumberFormat;
import java.util.Currency;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
NumberFormat lei = NumberFormat.getCurrencyInstance(Locale.of("ro", "RO"));
NumberFormat euro = NumberFormat.getCurrencyInstance(Locale.of("ro", "RO"));
euro.setCurrency(Currency.getInstance("EUR"));
double pretEuro = 89.9;
double curs = 4.97;
System.out.println("Preț: " + euro.format(pretEuro));
System.out.println("În lei: " + lei.format(pretEuro * curs));
}
}
Rezultat
Preț: 89,90 EUR
În lei: 446,80 RON
Greșeli frecvente
- Compari rezultatul cu un text scris de mână („1.234,50 RON”) și obții
false: între număr și monedă este un spațiu special (U+00A0), nu unul obișnuit. - Crezi că
setCurrencyface conversia valutară. Schimbă doar simbolul afișat; cursul îl aplici tu.
Comenzi înrudite
NumberFormat: Formatează numere după regulile unei limbi (1.234,5 în română, 1,234.5 în engleză); getInstance îl creează, format îl aplică.Locale: Reprezintă o limbă și o țară (ro-RO, en-US); spune cum se formatează numere, bani, date și cum se compară textele.PrintStream.printf: Afișează text formatat după un șablon cu %s, %d, %.2f, %n: numere cu zecimale fixe, coloane aliniate.