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.