格式在kotlin字符串模板

Kotlin有一个很好的function叫做字符串模板。 我很喜欢。

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

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

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

不幸的是,在字符串模板中没有内置的格式支持,作为一个解决方法,你可以使用类似于:

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

.format(n)函数,你需要自己定义为

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

Kotlin目前显然缺少一些function,我们会解决这个问题。

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

你的代码是:

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

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) 

用法

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

由于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 
Interesting Posts