gpt4 book ai didi

swift - 快速将科学计数法更改为十进制

转载 作者:搜寻专家 更新时间:2023-10-31 22:01:21 24 4
gpt4 key购买 nike

我想在 Swift 中将浮点值从 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
}
}

但是当我尝试使用像 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"

我还建议您不要在每次调用该属性时都创建一个 NumberFormatter 来扩展 Formatter 并添加一个静态格式化程序。您还可以扩展 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"

关于swift - 快速将科学计数法更改为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48333951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com