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

Ahm*_*med 10 numbers number-formatting kotlin

我想在 EditText 输入中添加逗号或每 3 位点。

例子 :

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

Rol*_*and 23

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

"%,d".format(input)
Run Code Online (Sandbox Code Playgroud)

这给出11,000了输入11000。替换,为您需要的任何分隔符。

如果要使用预定义的数字格式,例如对于当前语言环境,请使用:

java.text.NumberFormat.getIntegerInstance().format(input);
Run Code Online (Sandbox Code Playgroud)

还要确保检查其他格式实例,例如getCurrencyInstancegetPercentInstance。请注意,您也NumberFormat可以与其他语言环境一起使用。只需将它们传递给get*Instance- 方法。

一些第二个变体也可以在这里找到:Converting Integer to String with逗号为数千

如果您通过 Javascript 使用它,您可能会感兴趣:如何使用 JavaScript 格式化数字?


Wil*_*lva 16

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

fun Int.formatDecimalSeparator(): String {
    return toString()
        .reversed()
        .chunked(3)
        .joinToString(",")
        .reversed()
}
Run Code Online (Sandbox Code Playgroud)

并添加了一些测试:

    @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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

就我而言,这是一个 KMM 项目,我们不支持其他语言,所以它可以完成这项工作。我想说更好的解决方案是创建一个expectUtil 类,并且每个平台都考虑用户区域设置等来实现格式化程序。