Как заменить значение NaN на 0, = ноль, ! = null в Kotlin для скорости?

#android #kotlin #crash #nan #restart

#Android #kotlin #сбой #nan #перезапуск

Вопрос:

Когда я запускаю свое приложение, которое должно получать скорость устройства, я получаю NaN (я думаю, это означает «не число»?) значение для 1-3 секунд в текстовом поле.Числа хранятся в хранилище, но если это Nan, приложение вылетает. Как я могу заменить этот NaN на 0 (ноль) ?… например: If(NaNvalue = true){ (value = 0)} … что-то в этом роде. Я не нашел ничего, написанного на Android или kotlin, только python (с которым я не знаком). Любая помощь была бы отличной!!! Спасибо…

мой код:

     fun getSpeed(location: Location): Float{
            if (mRunning ) {
            //    val getkmh = (location.speed * 3.6)
           //     mSpeedKmH = getkmh.toFloat()
                mElapsedSeconds = ((SystemClock.elapsedRealtime() 
                -mChrono!!.getBase()) / 1000)
                mSpeedMeter = mDistanceTotal/mElapsedSeconds.toFloat()
                mSpeed = (   mSpeedMeter *3.6).toFloat()// *3.6 > KmH
            }
            return mSpeedKmH
        }

   fun updateSpeed() {
        val speedMeter = String.format(Locale.getDefault(), "%.1f",mSpeed)
            tvSpeed.text = speedMeter
    }
  

Ответ №1:

Вы можете сделать это, как показано в другом ответе, или используя takeIf оператор и Элвиса:

 val speedMeter = String.format(Locale.getDefault(), "%.1f", mSpeed.takeIf { !it.isNaN() } ?: 0.0)
  

Комментарии:

1. Вместо takeIf вы можете использовать takeUnless и удалить оператор not: mSpeed.takeUnless { it.isNaN() } ?: 0.0

Ответ №2:

 val value: Double = yourDoubleValue.let { if (it.isNaN()) 0.0 else it}
  

То же самое можно применить к значениям с плавающей запятой

Комментарии:

1. Вы должны использовать 0.0, или оно value будет иметь тип Number или Comparable , а не Double .

2. Я изменил ответ, чтобы убедиться, что переменная имеет тип double

Ответ №3:

Спасибо Фернандо и Tenfour04!!! Обе версии работают!!

значение скорости в формате = String.format(Locale.getDefault(), «%.1f», mSpeedAverageKmH.takeIf { !it.isNaN() } ?: 0.0)

val speedGesammt = String.format(Locale.getDefault(), «%.1f», mSpeedAverageKmH.let { if (it.isNaN()) 0.0 else it})