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有一个很好的特性,叫做字符串模板。
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"?
当前回答
很简单,使用:
val str: String = "%.2f".format(3.14159)
其他回答
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
不幸的是,在字符串模板中还没有内置的格式化支持,作为一种变通方法,你可以使用如下方法:
"pi = ${pi.format(2)}"
你需要将自己定义为.format(n)函数
fun Double.format(digits: Int) = "%.${digits}f".format(this)
这将只在Kotlin/JVM中工作。
很明显,Kotlin目前缺少一个功能,我们将修复它。
有一个Kotlin stdlib函数可以很好地使用,并且与Java的String格式完全兼容(它只是Java的String.format()的包装器)
请参阅Kotlin的文档
你的代码应该是:
val pi = 3.14159265358979323
val s = "pi = %.2f".format(pi)
举几个例子:
infix fun Double.f(fmt: String) = "%$fmt".format(this)
infix fun Double.f(fmt: Float) = "%${if (fmt < 1) fmt + 1 else fmt}f".format(this)
val pi = 3.14159265358979323
println("""pi = ${pi f ".2f"}""")
println("pi = ${pi f .2f}")
很简单,使用:
val str: String = "%.2f".format(3.14159)