我有一个场景,我必须使用双值。我的目标是如果某人进入37.5然后我必须显示37.5然后如果有人输入37.0然后我需要显示37.0并且如果有人专门输入37然后我只需要显示37而不是37.0 现在问题是我使用双数据类型来存储这些值。默认情况下,double将37转换为37.0。如果我截断小数部分然后我的一个场景失败,如果有人进入37.0然后我需要显示37.0
有人可以建议什么是达到上述目标的最佳方式?
答案 0 :(得分:1)
有点hacky,但提供了一些想法:
struct DoubleWithPrecision: CustomStringConvertible {
let value: Double
private let decimals: Int
var description: String { return String(format: "%1.\(decimals)f", value) }
init?(_ string: String) {
guard let convertedValue = Double(string) else { return nil }
value = convertedValue
if let decimalPoint = string.characters.indexOf(".") {
decimals = string.characters.count - string.startIndex.distanceTo(decimalPoint) - 1
} else {
decimals = 0
}
}
}
let foo = DoubleWithPrecision("42")!
let bar = DoubleWithPrecision("42.0")!
print(foo) // 42
print(bar) // 42.0
答案 1 :(得分:0)
存储用户输入NSString
并仅在需要显示结果时应用逻辑(截断与否)