Ce face String.toDouble
"9.75".toDouble() returnează numărul 9.75. Separatorul zecimal este întotdeauna punctul, indiferent de limba sistemului. Sunt acceptate și numerele întregi ("10") și notația științifică ("1.5e3").
Un text cu virgulă zecimală, cum scriem în română ("9,75"), nu este acceptat: toDouble() aruncă NumberFormatException, iar toDoubleOrNull() returnează null. Înlocuiește întâi virgula cu punct.
Ce returnează
Double; toDoubleOrNull returnează Double?.
Exemple
Exemplul 1: Media unor note citite ca text
Fiecare notă este transformată în Double, apoi calculăm media.
fun main() {
val note = "9.50 8.25 10 7.75".split(" ").map { it.toDouble() }
println(note)
println("Media: ${note.average()}")
}
Rezultat
[9.5, 8.25, 10.0, 7.75]
Media: 8.875
Exemplul 2: Virgula zecimală românească
Cu virgulă, conversia eșuează și primim null. După replace(',', '.') funcționează.
fun main() {
val pret = "12,99"
println(pret.toDoubleOrNull())
println(pret.replace(',', '.').toDoubleOrNull())
println("1.5e3".toDouble())
}
Rezultat
null
12.99
1500.0
Exemplul 3: Validarea unei sume
toDoubleOrNull ne lasă să tratăm separat sumele invalide, fără excepții.
fun main() {
val sume = listOf("150.5", "o sută", "-20", "75")
for (s in sume) {
val valoare = s.toDoubleOrNull()
when {
valoare == null -> println("\"$s\" nu este o sumă")
valoare < 0 -> println("$valoare: suma nu poate fi negativă")
else -> println("$valoare lei acceptați")
}
}
}
Rezultat
150.5 lei acceptați
"o sută" nu este o sumă
-20.0: suma nu poate fi negativă
75.0 lei acceptați
Greșeli frecvente
- Convertești direct „12,99” introdus de un utilizator român. Fără
replace(',', '.')conversia eșuează. - Compari rezultatul cu
==după calcule:0.1 + 0.2 == 0.3estefalse. Pentru bani, rotunjește sau lucrează în bani întregi (Long).
Comenzi înrudite
String.toInt: Transformă un text în număr întreg; toInt aruncă excepție la text invalid, toIntOrNull returnează null.String.format: Construiește un text după un șablon cu marcaje ca %d, %s, %.2f, de exemplu pentru numere cu două zecimale.Double.roundToInt: Rotunjește un Double la cel mai apropiat Int; jumătățile (2.5) se rotunjesc în sus.