Форматирование в шаблонах строк kotlin



Kotlin имеет отличную функцию под названием string templates. Мне это очень нравится.



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


но возможно ли иметь какое-либо форматирование в шаблонах? Например, я хотел бы отформатировать Double в шаблонах строк в kotlin, по крайней мере, установить количество цифр после десятичного разделителя:



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

7 ответов:

к сожалению, пока нет встроенной поддержки форматирования в шаблонах строк, в качестве обходного пути вы можете использовать что-то вроде:

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

the .format(n) функция вам нужно будет определить себя как

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

здесь явно есть часть функциональности, которая отсутствует у Котлина на данный момент, мы это исправим.

в качестве решения проблемы есть функция Kotlin stdlib который может быть использован в хорошем смысле и полностью совместим с форматом строки Java (это только оболочка вокруг Java String.format())

ваш код будет такой:

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

класс строк Котлина имеет

С 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

многие ответы относятся к строке.формат и связанная, но не правильная позиция в последней главной ветви. Для справки, этой где он находится сейчас.

его простой, Использование:

val str: String ="%.2f".формат(3.14159)

попробовать забрать. Он возвращает список, содержащий первые n элементов.

val pi = 3.14159265358979323
val s = pi.take(4)

Comments

    Ничего не найдено.