mod*_*itt 6 math nsnumberformatter ios swift
我试图将给定的双精度转换为科学记数法,并遇到一些问题.我似乎无法找到关于如何做到这一点的大量文档.目前我正在使用:
var val = 500
var numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.ScientificStyle
let number = numberFormatter.numberFromString("\(val)")
println(number as Double?)
// Prints optional(500) instead of optional(5e+2)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
你可以设置NumberFormatter属性positiveFormat和exponent Symbol来格式化你想要的字符串,如下所示:
let val = 500
let formatter = NumberFormatter()
formatter.numberStyle = .scientific
formatter.positiveFormat = "0.###E+0"
formatter.exponentSymbol = "e"
if let scientificFormatted = formatter.string(for: val) {
print(scientificFormatted) // "5e+2"
}
Run Code Online (Sandbox Code Playgroud)
更新:Xcode 9•Swift 4
您还可以创建扩展以从数字类型获取科学格式化描述,如下所示:
extension Formatter {
static let scientific: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .scientific
formatter.positiveFormat = "0.###E+0"
formatter.exponentSymbol = "e"
return formatter
}()
}
Run Code Online (Sandbox Code Playgroud)
extension Numeric {
var scientificFormatted: String {
return Formatter.scientific.string(for: self) ?? ""
}
}
Run Code Online (Sandbox Code Playgroud)
print(500.scientificFormatted) // "5e+2"
Run Code Online (Sandbox Code Playgroud)