Double.parseDouble în Java

Double este wrapperul pentru double; parseDouble și valueOf transformă un text ca "3.75" în număr cu zecimale.

Sintaxă
public final class Double extends Number implements Comparable<Double>, Constable, ConstantDesc
static double parseDouble(String s)
static Double valueOf(String s)
static Double valueOf(double d)

Ce face Double.parseDouble

double ține numere cu zecimale (virgulă mobilă, 64 de biți). Clasa Double este varianta obiect și are constante utile: Double.MAX_VALUE, Double.POSITIVE_INFINITY, Double.NaN.

Double.parseDouble(s) citește un număr scris cu punct zecimal: "3.75", "-0.5", "1e3" (notație științifică). Spre deosebire de parseInt, spațiile de la început și sfârșit sunt ignorate. Virgula românească ("3,75") nu este acceptată și aruncă NumberFormatException. Sunt acceptate și cuvintele "NaN" și "Infinity".

Double.valueOf face aceeași conversie, dar returnează un obiect Double. Numerele double nu sunt exacte: 0.1 + 0.2 nu este exact 0.3. Pentru bani folosește BigDecimal sau lucrează în bani (întregi).

Parametri

Parametru Descriere
s Textul cu numărul (cu punct zecimal).
d Pentru valueOf(double): valoarea de împachetat.

Ce returnează

parseDouble: un double. valueOf: un Double.

Exemple

Exemplul 1: Conversii cu punct zecimal

public class Main {
    public static void main(String[] args) {
        System.out.println(Double.parseDouble("3.75"));
        System.out.println(Double.parseDouble("  -0.5  "));
        System.out.println(Double.parseDouble("1e3"));
        System.out.println(Double.parseDouble("10"));
        Double pret = Double.valueOf("12.99");
        System.out.println(pret * 2);
        System.out.println(0.1 + 0.2);
    }
}

Rezultat

3.75
-0.5
1000.0
10.0
25.98
0.30000000000000004

Exemplul 2: Prețuri scrise cu virgulă

Înlocuim virgula cu punct înainte de conversie.

public class Main {
    public static void main(String[] args) {
        String[] preturi = {"4,50", "12.99", "doi lei"};
        double total = 0;
        for (String p : preturi) {
            try {
                total += Double.parseDouble(p);
            } catch (NumberFormatException e) {
                System.out.println("Nu pot citi: " + p);
                try {
                    total += Double.parseDouble(p.replace(',', '.'));
                    System.out.println("  corectat: " + p.replace(',', '.'));
                } catch (NumberFormatException e2) {
                    System.out.println("  sărit");
                }
            }
        }
        System.out.printf("Total: %.2f lei%n", total);
    }
}

Rezultat

Nu pot citi: 4,50
  corectat: 4.50
Nu pot citi: doi lei
  sărit
Total: 17.49 lei

Exemplul 3: Media notelor citite ca text

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double suma = 0;
        int numar = 0;
        while (in.hasNextLine()) {
            suma += Double.parseDouble(in.nextLine());
            numar++;
        }
        System.out.println("Media: " + suma / numar);
    }
}

Ce scrie utilizatorul (intrare)

9.50
8.25
10

Rezultat

Media: 9.25

Greșeli frecvente

  • Trimiți textul cu virgulă, ca în română: "3,75" aruncă excepție. Înlocuiește virgula sau folosește NumberFormat cu Locale românesc.
  • Compari rezultate double cu ==: 0.1 + 0.2 == 0.3 este false. Compară cu o toleranță: Math.abs(a - b) < 1e-9.
  • Folosești printf("%.2f") și te aștepți la virgulă: rezultatul depinde de limba sistemului. Pentru un format fix, dă Locale explicit.

Comenzi înrudite

  • Double.isNaN: Verifică dacă un double este NaN („nu este număr”), rezultatul unor calcule fără sens, ca 0.0 / 0.0.
  • Double.compare: Compară două valori double și returnează negativ, 0 sau pozitiv, tratând corect NaN și -0.0.
  • Integer.parseInt: Transformă un text ca „42” în numărul întreg 42; valueOf face același lucru, dar returnează un obiect Integer.
  • String.format: Construiește un șir dintr-un șablon cu %s, %d, %.2f etc.; formatted() face același lucru pe șablon.
  • Math.round: round() rotunjește la cel mai apropiat întreg (.5 în sus); rint() rotunjește .5 spre numărul par și returnează double.