You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin计算器TextView实时添加空格千位分隔符实现方案

为计算器TextView添加千位空格分隔符的解决方案

核心思路

每次更新TextView的数值时,先对原始数字字符串做格式化处理,为整数部分添加空格作为千位分隔符,再将格式化后的字符串设置给TextView,替换原始无分隔的数值。

Kotlin实现代码

1. 可复用的字符串扩展函数

创建支持整数、小数、负数场景的格式化扩展函数:

fun String.addThousandSeparator(): String {
    // 过滤非数字输入,直接返回原内容
    if (this.isEmpty() || !this.matches(Regex("-?\\d+(\\.\\d+)?"))) {
        return this
    }

    var input = this
    val isNegative = input.startsWith("-")
    // 单独处理负号,避免干扰整数部分格式化
    if (isNegative) {
        input = input.substring(1)
    }

    // 拆分整数与小数部分
    val numberParts = input.split(".")
    val integerPart = numberParts[0]
    val decimalPart = if (numberParts.size > 1) ".${numberParts[1]}" else ""

    // 反转整数部分,每三位拆分后加空格,再反转回原顺序
    val formattedInteger = integerPart.reversed()
        .chunked(3)
        .joinToString(" ")
        .reversed()

    // 拼接最终结果
    return if (isNegative) "-$formattedInteger$decimalPart" else "$formattedInteger$decimalPart"
}

2. 实际使用示例

不管是用户实时输入的字符串,还是计算得到的数字结果,都能通过该函数格式化后设置给TextView:

// 场景1:处理用户输入的字符串(从EditText获取后转至TextView显示)
val userInput = "1234567"
textView.text = userInput.addThousandSeparator() // 显示:1 234 567

// 场景2:处理计算结果(数字类型转字符串后格式化)
val calculationResult = 987654.321
textView.text = calculationResult.toString().addThousandSeparator() // 显示:987 654.321

// 场景3:处理负数
val negativeNumber = "-100000"
textView.text = negativeNumber.addThousandSeparator() // 显示:-100 000

说明

  • 自动判断是否需要添加分隔符:整数部分长度超过3位时插入空格,≤3位时保持原格式。
  • 兼容小数、负数场景,不会破坏小数部分的显示。
  • 对非数字输入做了容错处理,避免格式化出错。

内容的提问来源于stack exchange,提问作者Khumo Mashapa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:45:55