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

Swift 5 不使用NumberFormatter为字符串数字添加千分位与小数分隔符

解决思路

给整数部分添加千分位分隔符的核心逻辑非常简单:从整数部分的最右侧向左遍历,每走过3位就插入1个分隔符,注意遍历停止在首位之前,避免开头多出多余的分隔符。

具体实现代码

你可以单独封装一个千分位处理的工具函数,和你已经写好的整数、小数拆分逻辑结合即可:

// 千分位分隔符处理函数
func addThousandSeparator(to intString: String, separator: Character = ",") -> String {
    // 长度不足3位直接返回,无需处理
    guard intString.count > 3 else { return intString }
    var charArray = Array(intString)
    var insertPosition = charArray.count - 3
    // 从右往左每3位插入分隔符
    while insertPosition > 0 {
        charArray.insert(separator, at: insertPosition)
        insertPosition -= 3
    }
    return String(charArray)
}

// 结合你原有逻辑的完整调用
let inputNumber = "454685"
// 拆分小数和整数部分(建议提前校验输入长度≥2,避免索引越界)
let decimalSplitIndex = inputNumber.index(inputNumber.endIndex, offsetBy: -2)
let intPart = String(inputNumber[..<decimalSplitIndex])
let decimalPart = String(inputNumber[decimalSplitIndex...])

// 处理千分位
let formattedIntPart = addThousandSeparator(to: intPart)
// 拼接最终结果
let finalResult = "$ \(formattedIntPart).\(decimalPart)"
print(finalResult) // 输出:$ 4,546.85
可选优化点
  • 增加输入合法性校验:提前判断输入字符串是否全部为数字、长度是否≥2,避免索引访问崩溃
  • 如果需要适配其他地区的千分位格式,直接修改addThousandSeparator函数的separator参数即可,比如传入.即可得到1.112.345格式的整数部分
  • 如果需要支持负数金额,可先提取负号,处理完数字部分再拼接回去即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:00