簡體   English   中英

十進制0精度

[英]decimal 0 precision

我有一個場景,我必須使用雙倍值。 我的目標是,如果有人輸入37.5,那么我必須顯示37.5,如果有人輸入37.0,那么我需要顯示37.0,如果有人專門輸入37,那么我只需要顯示37,而不是37.0,現在的問題是我正在使用雙重數據用於存儲這些值的類型。 默認情況下,double將37轉換為37.0。 如果我截斷了小數部分,則我的情況之一失敗了,如果有人輸入37.0,那么我確實需要顯示37.0

有人可以建議實現上述目標的最佳方法是什么?

有點古怪,但可以為您提供一些想法:

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

存儲用戶輸入的NSString並僅在需要顯示結果時(不截斷)應用邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM