【问题标题】:decimal 0 precision十进制 0 精度
【发布时间】:2016-02-16 14:39:08
【问题描述】:
我有一个场景,我必须使用双值。我的目标是如果有人输入 37.5,那么我必须显示 37.5,如果有人输入 37.0,那么我需要显示 37.0,如果有人专门输入 37,那么我只需要显示 37 而不是 37.0
现在的问题是我使用双数据类型来存储这些值。 double 默认将 37 转换为 37.0 。如果我截断小数部分,那么我的一种情况会失败,如果有人输入 37.0,那么我确实需要显示 37.0
有人可以建议实现上述目标的最佳方法吗?
【问题讨论】:
标签:
ios
swift
double
decimal
rounding
【解决方案1】:
有点老套,但给你一些想法:
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
【解决方案2】:
存储用户输入的NSString 并仅在需要显示结果时应用您的逻辑(截断或不截断)