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.

Usando ValueFormatter en MP Chart pero no está teniendo efecto.

Usando MP Chart en Android. Referencia: https://github.com/PhilJay/MPAndroidChart

Tengo que mostrar 30.8351 como 30.83 en el gráfico de barras.

Así que encontré que podemos hacerlo utilizando el Value Formatter en MP Chart.

He creado una clase para esto de la siguiente manera:

class MyValueFormatter : ValueFormatter() {
override fun getFormattedValue(
value: Float,
entry: Entry,
dataSetIndex: Int,
viewPortHandler: ViewPortHandler
): String {
var mFormat: DecimalFormat = DecimalFormat(“###,###,##0.0″)
return mFormat.format(value) + ” $”
}
}

y luego estableciéndolo en el conjunto de datos de mi gráfico de la siguiente manera:

val set1: BarDataSet
set1.setValueFormatter(MyValueFormatter())

Pero todavía muestra 30.8351 en lugar de 30.83 encima del gráfico de barras, es decir, como un valor de la barra.

¿Cuál podría ser el problema?

EDITAR A CONTINUACIÓN DESPUÉS DE QUE JEEL RESPONDIÓ

Ahora he utilizado el Value Formatter como sigue:

set1.valueFormatter = object : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
var mFormat: DecimalFormat = DecimalFormat(“##.##”)
return mFormat.format(value)
}
}

Pero para el valor -0.594 obtengo -0.6.
Debería ser -0.59 solamente.

Para 1.234 es 1.23 (BIEN).

Pero para 1.235 es 1.24 (NO BIEN): no debería redondear el valor.

¿Cuál podría ser el problema?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está en el DecimalFormat utilizado en el Formateador de Valores. Por defecto, DecimalFormat redondea los valores al dígito más cercano. Para obtener el formato deseado, puedes utilizar el método setRoundingMode() de DecimalFormat y establecerlo en RoundingMode.DOWN.

    Por lo tanto, tu Formateador de Valores actualizado debería verse así:

    set1.valueFormatter= object : ValueFormatter() {
        override fun getFormattedValue(value: Float): String {
            val mFormat : DecimalFormat = DecimalFormat("##.##")
            mFormat.roundingMode = RoundingMode.DOWN
            return mFormat.format(value)
        }
    }
    

    Esto debería funcionar tanto para valores positivos como negativos.

Comments are closed.