十进制0精度

时间:2016-02-16 14:39:08

标签: ios swift double decimal rounding

我有一个场景,我必须使用双值。我的目标是如果某人进入37.5然后我必须显示37.5然后如果有人输入37.0然后我需要显示37.0并且如果有人专门输入37然后我只需要显示37而不是37.0 现在问题是我使用双数据类型来存储这些值。默认情况下,double将37转换为37.0。如果我截断小数部分然后我的一个场景失败,如果有人进入37.0然后我需要显示37.0

有人可以建议什么是达到上述目标的最佳方式?

2 个答案:

答案 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并仅在需要显示结果时应用逻辑(截断与否)