我想一个浮点值从转换1e-05到0.00001斯威夫特.
我使用了以下扩展名:
extension Float {
var avoidNotation: String {
let numberFormatter = NumberFormatter()
numberFormatter.allowsFloats = true
numberFormatter.maximumFractionDigits = 8
numberFormatter.numberStyle = .decimal
return numberFormatter.number(from: "\(self)")!.stringValue
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用浮点值时,1e-05.avoidNotation结果却是一样的0.00001
您应该使用Formatter的string(for:)方法,而不是从字符串插值得到的数字中获取stringValue:
extension Float {
var avoidNotation: String {
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 8
numberFormatter.numberStyle = .decimal
return numberFormatter.string(for: self) ?? ""
}
}
Float(1e-05).avoidNotation // "0.00001"
Run Code Online (Sandbox Code Playgroud)
我建议每次调用扩展Formatter并添加静态格式化程序的属性时,不要创建NumberFormatter.您还可以扩展FloatingPoint而不是Float,以便扩展所有浮点类型:
extension Formatter {
static let avoidNotation: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 8
numberFormatter.numberStyle = .decimal
return numberFormatter
}()
}
extension FloatingPoint {
var avoidNotation: String {
return Formatter.avoidNotation.string(for: self) ?? ""
}
}
Float(1e-05).avoidNotation // "0.00001"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |