Kotlin有一个很好的特性,叫做字符串模板。

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

但是可以在模板中设置格式吗?例如,我想在kotlin中格式化Double in字符串模板,至少要在小数分隔符后设置一些数字:

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

当前回答

Kotlin的String类现在有一个格式化函数,它在内部使用Java的String。格式的方法:

/**
 * 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)

使用

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

其他回答

它有字符串格式的例子在Kotlin for Android TextView:

val format = String.format("<font color=#3177a3> test1: <b>%s</b><br> test2: <b>%s</b><br> test3: <b>%s</b></font>", "value1", "value2", "value3")
textView.text = format

因为字符串。format只是一个内部调用Java .lang. string .format的扩展函数,如果你需要更大的灵活性,你可以使用Java的DecimalFormat编写自己的扩展函数:

fun Double.format(fracDigits: Int): String {
    val df = DecimalFormat()
    df.setMaximumFractionDigits(fracDigits)
    return df.format(this)
}

println(3.14159.format(2)) // 3.14

它有字符串格式 例子:

fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}

Kotlin的String类现在有一个格式化函数,它在内部使用Java的String。格式的方法:

/**
 * 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)

使用

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

有一个Kotlin stdlib函数可以很好地使用,并且与Java的String格式完全兼容(它只是Java的String.format()的包装器)

请参阅Kotlin的文档

你的代码应该是:

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