template strings literal es6 concatenar string-formatting kotlin

string formatting - strings - Formato en plantillas de cadenas kotlin



template strings html (5)

Como String.format es solo una función de extensión (ver aquí ) que internamente llama a java.lang.String.format usted puede escribir su propia función de extensión usando DecimalFormat de Java si necesita más flexibilidad:

fun Double.format(fracDigits: Int): String { val df = DecimalFormat() df.setMaximumFractionDigits(fracDigits) return df.format(this) } println(3.14159.format(2)) // 3.14

Kotlin tiene una excelente característica llamada plantillas de cuerdas. Me encanta de verdad.

val i = 10 val s = "i = $i" // evaluates to "i = 10"

Pero, ¿es posible tener algún formato en las plantillas? Por ejemplo, me gustaría formatear el doble en plantillas de cadena en kotlin, al menos para establecer un número de dígitos después de un separador decimal:

val pi = 3.14159265358979323 val s = "pi = $pi??" // How to make it "pi = 3.14"?


Como solución alternativa, existe una función Kotlin stdlib que se puede utilizar de una forma agradable y totalmente compatible con el formato String de Java (es solo un contenedor de String.format() de Java String.format() .

Tu código sería:

val pi = 3.14159265358979323 val s = "pi = %.2f".format(pi)


Desafortunadamente, aún no hay soporte integrado para formatear en plantillas de cadenas, como solución alternativa, puede usar algo como:

"pi = ${pi.format(2)}"

la función .format(n) que necesitarías para definirte a ti mismo como

fun Double.format(digits: Int) = java.lang.String.format("%.${digits}f", this)

Claramente hay una funcionalidad que falta en Kotlin en este momento, la arreglaremos.


La clase String de Kotlin ahora tiene una función de format , que internamente usa el método String.format de Java:

/** * Uses this string as a format string and returns a string obtained by substituting the specified arguments, * using the default locale. */ @kotlin.internal.InlineOnly public inline fun String.Companion.format(format: String, vararg args: Any?): String = java.lang.String.format(format, *args)

Uso

val pi = 3.14159265358979323 val formatted = String.format("%.2f", pi) ; println(formatted) >>3.14


Muchas respuestas se refieren a String.format y related, pero no a la posición correcta en la última rama principal. Como referencia, this es donde se encuentra ahora.