Ошибка 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
→ Ссылка