es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se convierte un entero a un flotante durante la vinculación de datos?

Tengo un Int que contiene un número decimal en décimas, por ejemplo, mi int contiene 308 para representar el número decimal 30.8. Quiero usar la vinculación de datos para mostrar este número en un TextView junto con otro texto. Mi TextView tiene la siguiente entrada de texto:

android:text="@{String.format("mi valor: %.1f", @{viewModel.myValue}.toFloat()/10.0f)}"

Esto no se puede compilar debido al siguiente error:

[databinding] {"msg":"no se puede encontrar el método toFloat() en la clase java.lang.Integer","file":"app/src/main/res/layout/fragment_you.xml","pos":[{"line0":163,"col0":54,"line1":163,"col1":84}]}

El valor en cuestión se define de la siguiente manera:

private val _myValue = MutableLiveData<int>()
val myValue: LiveData<int> = _myValue

Pensé que esto significaba que era un entero de Kotlin y podía llamar funciones de Kotlin en él, pero aparentemente es un entero de Java y no puedo hacerlo.

¿Por qué no puedo llamar a toFloat() allí? ¿Cómo puedo mostrar este Int como un número decimal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la función toInt() no se puede encontrar en la clase java.lang.Integer, lo cual confirma que _myValue es en efecto un Integer de Java en lugar de un Int de Kotlin.

    Para resolver este problema, puedes usar en su lugar la función toDouble(), la cual está disponible tanto para los Int de Kotlin como para los Integers de Java. Esto te daría la representación decimal del valor entero, el cual luego puedes dividir por 10.0 para obtener el resultado deseado.

    Aquí tienes una expresión de enlace actualizada que debería funcionar:

    android:text="@{String.format("mi valor: %.1f", @{viewModel.myValue}.toDouble()/10.0)}"

    Esto mostrará el valor de _myValue en el formato deseado en tu TextView.

Comments are closed.