Swift中NumberFormatter如何保留原小数位并添加千分位分隔符?
解决NumberFormatter保留原小数位数并添加千分位分隔符的问题
我完全懂你的需求——既要给数字加上千分位分隔符提升可读性,又不想丢失原本的小数位数,毕竟不同数值的精度不一样,硬固定位数反而会破坏数据准确性对吧?
你遇到的问题根源在于,NumberFormatter的.decimal样式默认会根据系统区域设置自动限制小数位数(比如很多地区默认是3位),所以才会把1.27826截断成1.278。咱们只需要调整几个属性就能搞定:
关键设置步骤
- 保持
numberStyle = .decimal来启用千分位分隔符 - 设置
maximumFractionDigits为一个足够大的数值(比如15),这样就能保留所有原有的小数位(double类型的有效精度大概是15-17位,15完全够用) - 设置
minimumFractionDigits = 0,确保整数不会显示多余的小数点和末尾0
完整代码示例
// 建议把Formatter初始化放在全局或者类的属性中,避免重复创建 let numberFormatter: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.maximumFractionDigits = 15 formatter.minimumFractionDigits = 0 return formatter }() // 你的TableView点击处理代码 if let coinPrice = coinPriceDouble, let formattedPrice = numberFormatter.string(from: NSNumber(value: coinPrice)) { self.coinPriceLbl.text = "\(coinTitleText!): \(Cryptocoin.instance.fiatSymbol)\(formattedPrice)" }
测试验证
用你给出的示例数组测试的话,结果会完全符合预期:
- 11307.3 → 11,307.3
- 1.27826 → 1.27826
- 0.584175 → 0.584175
- 1025.64 → 1,025.64
这样既保留了每个数值原本的小数精度,又正确添加了千分位分隔符,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

