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
相关产品推荐
相关产品推荐

