NumberFormat.getCurrencyInstance în Java

Formatează sume de bani cu simbolul și regulile unei țări: 1.234,50 RON pentru România, $1,234.50 pentru SUA.

Sintaxă
static NumberFormat getCurrencyInstance()
static NumberFormat getCurrencyInstance(Locale locale)
void setCurrency(Currency moneda)

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ă setCurrency face 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.