BigDecimal.valueOf în Java

Creează un BigDecimal dintr-un long sau dintr-un double, folosind forma lui zecimală scurtă (0.1 rămâne 0.1).

Sintaxă
static BigDecimal valueOf(long valoare)
static BigDecimal valueOf(long valoareNescalata, int scala)
static BigDecimal valueOf(double valoare)   // Java 5

Ce face BigDecimal.valueOf

BigDecimal.valueOf(long) creează un număr întreg exact. valueOf(1999, 2) creează 19.99: valoarea 1999 cu 2 cifre după virgulă, util când ții prețurile în bani.

BigDecimal.valueOf(double) folosește textul dat de Double.toString(valoare), deci valueOf(0.1) dă exact 0.1, spre deosebire de new BigDecimal(0.1). Dacă valoarea double era deja greșită dintr-un calcul anterior, eroarea rămâne.

Pentru valori mici obișnuite (0, 1, 10), metoda returnează obiecte refolosite, deci este puțin mai eficientă decât constructorul.

Parametri

Parametru Descriere
valoare Un long sau un double.
scala Câte cifre din valoareNescalata sunt după virgulă.

Ce returnează

Un BigDecimal.

Exemple

Exemplul 1: Cele trei variante

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        System.out.println("valueOf(250): " + BigDecimal.valueOf(250));
        System.out.println("valueOf(1999, 2): " + BigDecimal.valueOf(1999, 2));
        System.out.println("valueOf(0.1): " + BigDecimal.valueOf(0.1));
        System.out.println("new BigDecimal(0.1): " + new BigDecimal(0.1));
    }
}

Rezultat

valueOf(250): 250
valueOf(1999, 2): 19.99
valueOf(0.1): 0.1
new BigDecimal(0.1): 0.1000000000000000055511151231257827021181583404541015625

Exemplul 2: Prețuri ținute în bani, afișate în lei

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        long[] preturiInBani = {1999, 450, 12990};
        BigDecimal total = BigDecimal.ZERO;
        for (long bani : preturiInBani) {
            BigDecimal lei = BigDecimal.valueOf(bani, 2);
            System.out.println(lei + " lei");
            total = total.add(lei);
        }
        System.out.println("Total: " + total + " lei");
    }
}

Rezultat

19.99 lei
4.50 lei
129.90 lei
Total: 154.39 lei

Exemplul 3: valueOf nu repară un double deja greșit

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        double suma = 0.1 + 0.2;
        System.out.println(BigDecimal.valueOf(suma));
        System.out.println(BigDecimal.valueOf(0.1).add(BigDecimal.valueOf(0.2)));
    }
}

Rezultat

0.30000000000000004
0.3

Greșeli frecvente

  • Faci calculele în double și transformi în BigDecimal doar la final. Erorile s-au produs deja; transformă valorile la început.
  • Confunzi valueOf(1999, 2) cu „1999 rotunjit la 2 zecimale”. Rezultatul este 19.99, nu 1999.00.

Comenzi înrudite

  • BigDecimal: Număr zecimal exact, fără erori de rotunjire ca la double; se folosește pentru bani, prețuri și calcule financiare.
  • BigDecimal.add: Adunare, scădere și înmulțire exactă între BigDecimal; fiecare returnează un număr nou.
  • BigDecimal.setScale: Rotunjește (sau completează cu zerouri) un BigDecimal la un număr fix de zecimale: setScale(2, RoundingMode.HALF_UP).
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: BigDecimal.valueOf

Ai o nelămurire despre utilizarea comenzii BigDecimal.valueOf sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.