使用Kotlin每3位添加逗号或点

scyqe7ek  于 2023-04-21  发布在  Kotlin
关注(0)|答案(8)|浏览(243)

我想在EditText输入中每3个数字添加逗号或点。
示例:

  • 输入:1000。输出:1.000
  • 输入:11000。输出:11.000
fd3cxomn

fd3cxomn1#

如果您在JVM上,则可以使用

"%,d".format(input)

它为输入11000提供了11,000。将,替换为您需要的任何分隔符。
如果要使用预定义的数字格式,例如针对当前区域设置,请用途:

java.text.NumberFormat.getIntegerInstance().format(input);

还要确保检查其他格式示例,例如getCurrencyInstancegetPercentInstance。请注意,您也可以将NumberFormat用于其他区域设置。只需将它们传递给get*Instance-方法。
第二种变体的一些也可以在这里找到:Converting Integer to String with comma for thousands
如果你是通过Javascript使用它,你可能会感兴趣:How do I format numbers using JavaScript?

ttygqcqt

ttygqcqt2#

基于上面的Splitframe答案,做了一个简化版本(没有var):

fun Int.formatDecimalSeparator(): String {
    return toString()
        .reversed()
        .chunked(3)
        .joinToString(",")
        .reversed()
}

并添加了一些测试:

@Test
    fun whenFormatDecimal_thenReturnFormatted() {
        mapOf(
            1 to "1",
            12 to "12",
            123 to "123",
            1234 to "1,234",
            12345 to "12,345",
            123456 to "123,456",
            1234567 to "1,234,567",
            12345678 to "12,345,678",
            123456789 to "123,456,789",
            1234567890 to "1,234,567,890",
        ).forEach { (test, expected) ->
            val result = test.formatDecimalSeparator()
            assertEquals(expected, result)
        }
    }

在我的例子是一个KMM项目,我们不支持其他语言,所以它做的工作。一个更好的解决方案,我会说,创建一个expect Util类和每个平台实现考虑到用户区域设置等格式化程序。

rjzwgtxy

rjzwgtxy3#

System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));

ndh0cuux

ndh0cuux4#

这是一个简单的方法,可以用任何字符替换默认分隔符:

val myNumber = NumberFormat.getNumberInstance(Locale.US)
   .format(123456789)
   .replace(",", "،")
falq053o

falq053o5#

我在一个非JVM的Kotlin环境中使用了这个:

fun formatDecimalSeperators(number :String) :String {
    var index = 1
    return number
            .takeIf { it.length > 3 }
            ?.reversed()
            ?.map { if (index++ % 3 == 0) "$it," else it }
            ?.joinToString("")
            ?.reversed()
            ?.removePrefix(",")
            ?: number
}
9lowa7mx

9lowa7mx6#

您也可以在Android String Resources中使用@罗兰answer来格式化它:

<string name="answer_count">%,01d answers</string>
x759pob2

x759pob27#

这个可能会有帮助

fun format(amount):String{
    val numberFormat = DecimalFormat("#,###.00")
    return numberFormat.format(amount)
}
idfiyjo8

idfiyjo88#

对于一个没有获取Locale的方法,你可以使用一个扩展来将你的Int转换成一个格式化的String,如下所示:

fun Int.formatWithThousandComma(): String {
    val result = StringBuilder()
    val size = this.toString().length
    return if (size > 3) {
        for (i in size - 1 downTo 0) {
            result.insert(0, this.toString()[i])
            if ((i != size - 1) && i != 0 && (size - i) % 3 == 0)
                result.insert(0, "\'")
        }
        result.toString()
    } else
        this.toString()
}

相关问题