我想在EditText输入中每3位添加逗号或点。
示例:
- 输入:1000。输出:1.000
- 输入:11000。输出:11.000
如果您在JVM上,您可以使用
"%,d".format(input)
其对于输入CCD_ 2给出CCD_。将,
替换为所需的任何分隔符。
如果您想使用预定义的数字格式,例如针对当前区域设置,请使用:
java.text.NumberFormat.getIntegerInstance().format(input);
还要确保检查其他格式实例,例如getCurrencyInstance
或getPercentInstance
。请注意,您也可以将NumberFormat
与其他区域设置一起使用。只需将它们传递给get*Instance
-方法即可。
第二种变体也可以在这里找到:将Integer转换为带逗号的字符串,表示数千
如果你通过Javascript使用它,你可能会感兴趣:我如何使用Javascript格式化数字?
基于上面的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类,每个平台在考虑用户Locale等的情况下实现格式化程序。
这是一种简单的方法,可以用任何字符替换默认分隔符:
val myNumber = NumberFormat.getNumberInstance(Locale.US)
.format(123456789)
.replace(",", "،")
System.out.println(NumberFormat.getNumberInstance(Locale.US(.format(35634646((;
我将其用于非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
}
您也可以在Android字符串资源中使用@Roland answer来格式化它:
<string name="answer_count">%,01d answers</string>
这可能有助于
fun format(amount):String{
val numberFormat = DecimalFormat("#,###.00")
return numberFormat.format(amount)
}
这里有一个扩展函数可以处理您的案例,也可以处理
-
十进制位置
-
语言考虑
-
地板
fun Number.toFormattedNumber(significantDecimalPlaces: Int = 2): String? { val df = DecimalFormat( "#,###."+"#".repeat(significantDecimalPlaces), DecimalFormatSymbols(Locale.ENGLISH) ) df.roundingMode = RoundingMode.FLOOR return try { df.format(this.toDouble()) }catch (e: Exception){ null } }
这是的其他解决方案
fun separateDigit(text: String): String {
var reversedText = text.reversed()
var formattedText = ""
while (reversedText.length > 3) {
formattedText += "${reversedText.take(3)},"
reversedText = reversedText.drop(3)
}
formattedText += reversedText
return "${formattedText.reversed()}"
}
对于一个没有获取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()
}