Ваша строка имеет Unicode u+FEFF
знак порядка байтов в начале символа, который определяется как " Пробел нулевой ширины ". Он даже не определен как пробел, поэтому trim()
не удаляет его!
Я обнаружил, что даже при использовании java.lang.Double.parseDouble
произойдет сбой. Возможно, когда вы проверили это, вы случайно перепечатали проблемную c часть строки.
Вы можете проверить это, зарегистрировав длину вашей строки и заметив, что она длиннее, чем ожидалось.
Я не знаю, как вы взяли этот символ в свою строку (возможно, скопировав его из какого-то HTML?), Но вы должны быть в состоянии написать функцию для его обрезки, чтобы безопасно проанализировать его:
fun String.fullTrim() = trim().replace("\uFEFF", "")
val number = "39.05166667".fullTrim().toDouble()