kotlin字符串模板中的格式

Maj*_*cRa 166 string-formatting kotlin

Kotlin有一个很棒的功能叫做字符串模板.我真的很喜欢它.

 val i = 10 
 val s = "i = $i" // evaluates to "i = 10"
Run Code Online (Sandbox Code Playgroud)

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

val pi = 3.14159265358979323
val s = "pi = $pi??" // How to make it "pi = 3.14"?
Run Code Online (Sandbox Code Playgroud)

And*_*lav 208

遗憾的是,对于字符串模板中的格式化没有内置支持,作为一种解决方法,您可以使用以下内容:

"pi = ${pi.format(2)}"
Run Code Online (Sandbox Code Playgroud)

.format(n)功能你需要自己定义为

fun Double.format(digits: Int) = "%.${digits}f".format(this)
Run Code Online (Sandbox Code Playgroud)

目前Kotlin显然缺少一些功能,我们将修复它.

  • 我错了还是差不多4年后还没有? (24认同)
  • 好吧,从 2023 年开始...而且...我认为仍然...不可用。 (14认同)
  • 将其添加为2020年的新年礼物! (11认同)
  • 现在有空吗? (7认同)
  • @RagunathJawahar,答案仍然是最新的,我们还没有改进 (4认同)
  • @DavidCallanan 不,还没到。 (4认同)
  • @AndreyBreslav现在怎么样?这可用吗? (3认同)
  • @AndreyBreslav有机会Kotlin可以复制C#样式的字符串格式吗?在我使用过的所有不同格式设置类型中,它是迄今为止最好的。 (2认同)

akh*_*khy 115

作为一种解决方法,有一个Kotlin stdlib函数可以很好地使用并与Java的String格式完全兼容(它只是Java的包装String.format())

你的代码是:

val pi = 3.14159265358979323
val s = "pi = %.2f".format(pi)
Run Code Online (Sandbox Code Playgroud)

  • 我猜他的意思是这个文档:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.util.Locale-java.lang.String-java .lang.Object ...- (2认同)

use*_*754 18

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

/**
 * 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)
Run Code Online (Sandbox Code Playgroud)

用法

val pi = 3.14159265358979323
val formatted = String.format("%.2f", pi) ;
println(formatted)
>>3.14
Run Code Online (Sandbox Code Playgroud)

  • 现在在 Kotlin v1.2.21 中找不到 String.Companion.format。还有什么选择? (2认同)

mas*_*myf 13

它简单,用途:

val str:String = "%.2f".format(3.14159)
Run Code Online (Sandbox Code Playgroud)


Wil*_*zel 6

因为String.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
Run Code Online (Sandbox Code Playgroud)