簡體   English   中英

使用 Swift ".formatted()" 刪除尾隨零的小數?

[英]Using Swift ".formatted()" for decimals with trailing zeros removed?

我正在嘗試從雙打中刪除尾隨零,我看到的代碼與此類似

let formatter = NumberFormatter()
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 2
print(formatter.string(from: 1.0000)!) // 1
print(formatter.string(from: 1.2345)!) // 1.23

這需要您創建一個 NumberFormatter()。 我知道 Apple 最近推出了 new.formatted() function。 有誰知道是否可以使用這個新系統執行上述操作?

該文檔對我來說有點令人費解,但到目前為止我只看到了設置精度的能力。

let string = 1.00000.formatted(.number.precision(.fractionLength(2)))
// 1.00

您可以創建自己的FormatStyle

public struct DecimalPrecision<Value>: FormatStyle, Equatable, Hashable, Codable where Value :  BinaryFloatingPoint{
    let maximumFractionDigits: Int
    public func format(_ value: Value) -> String {
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = 0
        formatter.maximumFractionDigits = maximumFractionDigits
        
        return formatter.string(from: value as! NSNumber) ?? ""
    }
    
}

extension FormatStyle where Self == FloatingPointFormatStyle<Double> {
    public static func precision (maximumFractionDigits: Int) -> DecimalPrecision<Double> {
        return DecimalPrecision(maximumFractionDigits: maximumFractionDigits)
    }
}

然后使用它

let string = 1.00000.formatted(.precision(maximumFractionDigits: 2))

.precision是你應該使用的,然后有一個.fractionLength的變體,它以一個范圍作為參數,

10_000.123.formatted(.number.precision(.fractionLength(0…2)))

暫無
暫無

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

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