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"?
当前回答
因为字符串。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
其他回答
因为字符串。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
它有字符串格式的例子在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
它有字符串格式 例子:
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
芬兰湾的科特林1.7.2
String的format方法接受一个formatter-string和任意数量的nullable any类型的参数。
fun String.Companion.format(format: String, vararg args: Any?) : String
真正的代码可能是这样的:
fun main() {
val pi: Double = 3.141592653589
val gravity: Double = 9.80665
var str = String.Companion.format("%.2f %n%.2f", pi, gravity)
println(str)
}
其中%n是行分隔符,%f是浮点十进制格式。
结果是:
// 3.14
// 9.81
举几个例子:
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}")