Есть ли у Kotlin стандартный способ форматирования числа как английского порядкового номера?

В Swift я могу сделать что-то вроде этого:

let ordinalFormatter = NumberFormatter()
ordinalFormatter.numberStyle = .ordinal

print(ordinalFormatter.string(from: NSNumber(value: 3))) // 3rd

но я не вижу способа сделать это так легко в Котлине. Есть ли такой способ, или мне придется использовать сторонние библиотеки или написать свои собственные?

3 ответа

Решение

Ну, обычно трудно доказать, что чего-то не существует. Но я никогда не сталкивался с какой-либо функцией в kotlin-stdlib это сделало бы это или могло быть немедленно приспособлено для этого. Более того, kotlin-stdlib кажется, не содержит ничего специфичного для локали (какие порядковые числа, безусловно, являются).

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

fun ordinalOf(i: Int) = "$i" + if (i % 100 in 11..13) "th" else when (i % 10) {
    1 -> "st"
    2 -> "nd"
    3 -> "rd"
    else -> "th"
}

Также решения на Java: (здесь)

Вот мой вариант решения @hotkey:

          fun Int.ordinal() = "$this" + when {
        (this % 100 in 11..13) -> "th"
        (this % 10) == 1 -> "st"
        (this % 10) == 2 -> "nd"
        (this % 10) == 3 -> "rd"
        else -> "th"
    }

Вызвать, например,13.ordinal().

      fun Int.toOrdinalNumber(): String {
    if (this in 11..13) {
        return "${this}th"
    }

    return when (this % 10) {
        1 -> "${this}st"
        2 -> "${this}nd"
        3 -> "${this}rd"
        else -> "${this}th"
    }
}

В этом коде функция расширения getOrdinalNumber добавляется к классу Int. Сначала он проверяет, находится ли число в диапазоне от 11 до 13, поскольку в этих случаях порядковый номер всегда равен «th». В других случаях он проверяет последнюю цифру номера и добавляет соответственно «st», «nd» или «rd». Если ни одно из этих условий не соответствует, добавляется «th». Функция расширения добавлена ​​в класс Int. Сначала он проверяет, находится ли число в диапазоне от 11 до 13, поскольку в этих случаях порядковый номер всегда равен «th». В других случаях он проверяет последнюю цифру номера и добавляет соответственно «st», «nd» или «rd». Если ни одно из этих условий не соответствует, добавляется «th».

Другие вопросы по тегам