我想格式化小数,在最后的0之后有四个非零数字 . 例如,0.001765或0.00004839 .
大于1的任何数字都只有两位小数 . 例如,2.23 .
我想知道我是否可以使用NumberFormatter完成此操作?
你有两个条件 . 对于4位数使用 minimumSignificantDigits 和 maximumSignificantDigits ,对于超过1的值使用 maximumFractionDigits 作为2位 .
minimumSignificantDigits
maximumSignificantDigits
maximumFractionDigits
extension FloatingPoint { func specialFormat() -> String { let fmt = NumberFormatter() fmt.numberStyle = .decimal if abs(self) >= 1 { // adjust as needed fmt.maximumFractionDigits = 2 } else { fmt.minimumSignificantDigits = 4 fmt.maximumSignificantDigits = 4 } return fmt.string(for: self)! } } print(0.001765345.specialFormat()) print(0.00004839643.specialFormat()) print(1.2345.specialFormat())
输出:
0.001765 0.00004840 1.23
使用 maximumSignificantDigits 属性 .
let nf = NumberFormatter() nf.maximumSignificantDigits = 4 print(nf.string(for: 0.00000232323)!) // prints 0.000002323 print(nf.string(for: 2.3)!) // prints 2.3
我使用了收到的答案/评论的组合来最佳地解决这个问题 .
首先,两个必要的格式化程序通过扩展名作为静态属性(如Leo所建议) .
extension Formatter { static let twoDecimals: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.minimumFractionDigits = 2 formatter.maximumFractionDigits = 2 return formatter }() static let fourSigDigits: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.minimumSignificantDigits = 4 formatter.maximumSignificantDigits = 4 return formatter }() }
然后,有条件地应用适当的格式化程序的扩展(由rmaddy建议):
extension FloatingPoint { var currencyFormat: String { return abs(self) >= 1 ? Formatter.twoDecimals.string(for: self) ?? "" : Formatter.fourSigDigits.string(for: self) ?? "" } }
最后,您可以像这样使用它:
let eth = 1200.123456 let xrp = 1.23456789 let trx = 0.07891234 eth.currencyFormat //"1200.12" xrp.currencyFormat //"1.23" trx.currencyFormat //"0.07891"
3 回答
你有两个条件 . 对于4位数使用
minimumSignificantDigits
和maximumSignificantDigits
,对于超过1的值使用maximumFractionDigits
作为2位 .输出:
使用
maximumSignificantDigits
属性 .我使用了收到的答案/评论的组合来最佳地解决这个问题 .
首先,两个必要的格式化程序通过扩展名作为静态属性(如Leo所建议) .
然后,有条件地应用适当的格式化程序的扩展(由rmaddy建议):
最后,您可以像这样使用它: