如何从财务格式数字字符串中解析获取对应的NSNumber值
财务格式字符串反向解析方案
你可以直接复用之前转换字符串时用的NumberFormatter实现反向解析,只要保证 formatter 配置和转换时完全一致,就能稳定解析出正确的数值。
代码实现
你可以给String加扩展来封装解析逻辑:
extension String { /// 从财务格式字符串解析为NSNumber var financialNumber: NSNumber? { // 配置和转字符串时完全一致 Double.formatter.numberStyle = .decimal Double.formatter.maximumFractionDigits = 2 Double.formatter.minimumFractionDigits = 2 // 直接调用formatter的解析方法 return Double.formatter.number(from: self) } }
调用示例
let originalValue: Double = 1001 // 正向转财务格式字符串 guard let financialStr = originalValue.financialString else { return } print(financialStr) // 输出:1,001.00 // 反向解析回数值 guard let resultNumber = financialStr.financialNumber else { return } print(resultNumber.doubleValue) // 输出:1001.0
额外优化建议
你原来的Double扩展里每次计算financialString的时候都重复给formatter赋值,其实可以把配置移到formatter初始化的位置,减少不必要的重复配置,优化性能:
extension Double { static let formatter: NumberFormatter = { let fmt = NumberFormatter() fmt.numberStyle = .decimal fmt.maximumFractionDigits = 2 fmt.minimumFractionDigits = 2 // 如果需要固定格式不受系统区域影响,可显式指定locale // fmt.locale = Locale(identifier: "en_US_POSIX") return fmt }() var financialString: String? { Double.formatter.string(for: self) } }
注意:如果你的应用需要适配不同地区,一定要显式给formatter设置
locale属性,避免部分地区用空格、点作为千位分隔符导致解析失败。
内容的提问来源于stack exchange,提问作者Oleksandr Matrosov
相关产品推荐
相关产品推荐

