【问题标题】: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 并仅在需要显示结果时应用您的逻辑(截断或不截断)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-17
        相关资源
        最近更新 更多