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șteNumberFormatcuLocaleromânesc. - Compari rezultate
doublecu==:0.1 + 0.2 == 0.3estefalse. 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ăLocaleexplicit.
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.