Ошибка NumberFormatException при использовании try-catch
Не могли бы вы объяснить мне, почему при использовании функции try-catch она не выявляет ошибку?
fun main() {
convertStringToDouble(input = readLine()!!)
}
fun convertStringToDouble(input: String): Double {
try {
println(input.toDouble())
} catch (e: NumberFormatException) {
println("0.0")
}
return input.toDouble()
}
Логи:
Exception in thread "main" java.lang.NumberFormatException: For input string: "b"
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:556)
at OneoneKt.convertStringToDouble(oneone.kt:11)
at OneoneKt.main(oneone.kt:2)
at OneoneKt.main(oneone.kt)
Ответы (1 шт):
Автор решения: Vadik
→ Ссылка
Первый вызов вы обернули в try-catch, а второй нет. Поправить можно, например, так:
fun convertStringToDouble(input: String): Double =
try {
input.toDouble()
} catch (exception: NumberFormatException) {
0.0
}
Более того, можно обойтись без try-catch, воспользоваться функцией toDoubleOrNull:
fun convertStringToDouble(input: String): Double =
input.toDoubleOrNull() ?: 0.0
Или, еще более локанично, сделать экстеншен-функцию и назвать ее toDoubleOrZero:
fun String.toDoubleOrZero() = toDoubleOrNull() ?: 0.0