Format in kotlin string templates
Kotlin有一个很棒的功能叫做字符串模板。 我很喜欢。
1 2 | val i = 10 val s ="i = $i" // evaluates to"i = 10" |
但是模板中是否可以有任何格式? 例如,我想在kotlin中将字符串模板中的Double格式化,至少在小数分隔符后设置一些数字:
1 2 | val pi = 3.14159265358979323 val s ="pi = $pi??" // How to make it"pi = 3.14"? |
遗憾的是,对于字符串模板中的格式化没有内置支持,作为一种解决方法,您可以使用以下内容:
1 | "pi = ${pi.format(2)}" |
1 | fun Double.format(digits: Int) = java.lang.String.format("%.${digits}f", this) |
目前Kotlin显然缺少一些功能,我们将修复它。
作为一种解决方法,有一个Kotlin stdlib函数可以很好地使用并与Java的String格式完全兼容(它只是Java的
请参阅Kotlin的文档
你的代码是:
1 2 | val pi = 3.14159265358979323 val s ="pi = %.2f".format(pi) |
Kotlin的String类现在有一个格式函数,它在内部使用Java的
1 2 3 4 5 6 | /** * 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) |
用法
1 2 3 4 | val pi = 3.14159265358979323 val formatted = String.format("%.2f", pi) ; println(formatted) >>3.14 |
这很简单,
采用:
1 | val str:String ="%.2f".format(3.14159) |
由于
1 2 3 4 5 6 7 | fun Double.format(fracDigits: Int): String { val df = DecimalFormat() df.setMaximumFractionDigits(fracDigits) return df.format(this) } println(3.14159.format(2)) // 3.14 |
试试吧。它返回一个包含前n个元素的列表。
1 2 | val pi = 3.14159265358979323 val s = pi.take(4) |
但这正是rekire所说的收藏品,他们在下面的评论中礼貌地纠正了我。
您可以转换为字符串,使用take并转换回Double。
1 2 | val a = 3.14159265358979323 val b = a.toString().take(4).toDouble() |
虽然不是最好的主意,但它确实有效。