Redondea un flotante o un doble con 2 decimales en Kotlin
Este artículo explora diferentes formas de redondear un flotante o un doble con 2 decimales en Kotlin.
1. Usando roundToInt()
función
los roundToInt()
La función redondea un valor doble al entero más cercano. Se puede usar de la siguiente manera para redondear un flotante o un doble con los lugares decimales requeridos.
1 2 3 4 5 6 7 8 9 |
import kotlin.math.roundToInt fun main() { val random = 0.8458215996440445 val roundoff = (random * 100.0).roundToInt() / 100.0 println(roundoff) // 0.85 } |
El número de 0 indica el número de lugares decimales en la salida. Por lo tanto, para redondear con 4 decimales, use valor 10000.0
:
1 2 3 4 5 6 7 8 9 |
import kotlin.math.roundToInt fun main() { val random = 0.037854093052263726 val roundoff = (random * 10000.0).roundToInt() / 10000.0 println(roundoff) // 0.0379 } |
Además, considere esta versión alternativa y equivalente del código anterior:
1 2 3 4 5 6 7 8 9 |
import kotlin.math.roundToInt fun main() { val random = 0.797490220519589 val roundoff = (random * 10000).roundToInt().toDouble() / 10000 println(roundoff) // 0.7975 } |
Vale la pena señalar que la aritmética de punto flotante es muy complicada y es posible que no siempre funcione como se esperaba. Por ejemplo, el valor 295.335
se redondea "hacia abajo" a 295.33
en lugar de redondear "hacia arriba" a 295.34
.
1 2 3 4 5 6 7 8 |
import kotlin.math.roundToInt fun main() { val random = 295.335 println(random * 100.0) // 29533.499999999996 println((random * 100.0).roundToInt() / 100.0) // 295.33 } |
2. Usando DecimalFormat.format()
función
Alternativamente, podemos llamar a la DecimalFormat.format()
función para restringir el doble a 2 puntos decimales usando el patrón #.##
. los RoundingMode
se puede proporcionar utilizando el setRoundingMode()
función.
1 2 3 4 5 6 7 8 9 10 11 |
import java.math.RoundingMode import java.text.DecimalFormat fun main() { val random = 8435.21057752090819915 val df = DecimalFormat("#.##") df.roundingMode = RoundingMode.DOWN val roundoff = df.format(random) println(roundoff) // 8435.21 } |
Tenga en cuenta que el número de #
después del punto indica el número de lugares decimales. Por lo tanto, para redondear con 3 decimales, usa el patrón #.###
:
1 2 3 4 5 6 7 8 9 10 11 |
import java.math.RoundingMode import java.text.DecimalFormat fun main() { val random = 4732.8326486752163523 val df = DecimalFormat("#.###") df.roundingMode = RoundingMode.DOWN val roundoff = df.format(random) println(roundoff) // 4732.832 } |
Esta solución se enfrenta al mismo problema que la roundToInt()
función si no se proporciona el modo de redondeo. es decir, el valor 295.335
se redondea "hacia abajo" a 295.33
en lugar de redondear "hacia arriba" a 295.34
.
1 2 3 4 5 6 7 8 9 |
import java.text.DecimalFormat fun main() { val random = 295.335 val df = DecimalFormat("#.##") val roundoff = df.format(random) println(roundoff) // 295.33 } |
3. Usando String.format()
función
También podemos usar el String.format()
función para redondear un flotante o un doble con el número específico de lugares decimales. Esto funciona bien por el valor 295.335
, Como se muestra abajo:
1 2 3 4 5 |
fun main() { val random = 295.335 val roundoff = String.format("%.2f", random) println(roundoff) // 295.34 } |
4. Uso BigDecimal
Finalmente, podemos convertir el valor doble a un BigDecimal
y restrinja el doble a 2 puntos decimales usando el setScale()
función con lo especificado RoundingMode
.
1 2 3 4 5 6 7 8 9 |
import java.math.BigDecimal import java.math.RoundingMode fun main() { val random = Math.random() val bd = BigDecimal(random) val roundoff = bd.setScale(2, RoundingMode.FLOOR) println(roundoff) } |
Se trata de redondear un flotante o un doble con 2 decimales en Kotlin.