Saltar al contenido

Redondear doble a 1 lugar decimal kotlin: de 0.044999 a 0.1

Solución:

Finalmente hice lo que Andy Turner sugerido, redondeado a 3 decimales, luego a 2 y luego a 1:

Respuesta 1:

val number:Double = 0.0449999
val number3digits:Double = String.format("%.3f", number).toDouble()
val number2digits:Double = String.format("%.2f", number3digits).toDouble()
val solution:Double = String.format("%.1f", number2digits).toDouble()

Respuesta 2:

val number:Double = 0.0449999
val number3digits:Double = Math.round(number * 1000.0) / 1000.0
val number2digits:Double = Math.round(number3digits * 100.0) / 100.0
val solution:Double = Math.round(number2digits * 10.0) / 10.0

Resultado:

0,045 → 0,05 → 0,1

Nota: Sé que no es así como debería funcionar, pero a veces es necesario redondear teniendo en cuenta todos los decimales para algunos casos especiales, por lo que tal vez alguien lo encuentre útil.

los BigDecimal redondeo características varias RoundingModes, incluidos los que se redondean hacia arriba (desde cero) o hacia el infinito positivo. Si eso es lo que necesita, puede realizar el redondeo llamando setScale como sigue:

val number = 0.0449999
val rounded = number.toBigDecimal().setScale(1, RoundingMode.UP).toDouble()
println(rounded) // 0.1

Tenga en cuenta, sin embargo, que funciona de una manera que también redondeará cualquier cosa entre 0.0 y 0.1 para 0.1 (p.ej 0.000010.1).

los .toBigDecimal() La extensión está disponible desde Kotlin 1.2.

Sé que algunas de las soluciones anteriores funcionan perfectamente, pero quiero agregar otra solución que utiliza el concepto de techo y piso, que creo que está optimizado para todos los casos.

Si desea el valor más alto de los 2 dígitos después del decimal, use el siguiente código.

import java.math.BigDecimal 
import java.math.RoundingMode
import java.text.DecimalFormat

aquí, 1,45678 = 1,46

fun roundOffDecimal(number: Double): Double? {
    val df = DecimalFormat("#.##")
    df.roundingMode = RoundingMode.CEILING
    return df.format(number).toDouble()
}

Si desea el valor más bajo de los 2 dígitos después del decimal, utilice el siguiente código.

aquí, 1,45678 = 1,45

fun roundOffDecimal(number: Double): Double? {
    val df = DecimalFormat("#.##")
    df.roundingMode = RoundingMode.FLOOR
    return df.format(number).toDouble()
}

Aquí una lista de todas las banderas disponibles: CEILING, DOWN, FLOOR, HALF_DOWN, HALF_EVEN, HALF_UP, UNNECESSARY, UP

La información detallada se da en los documentos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *