减少(调整)Double/Float swift 中的可变小数点

Reducing(Adjusting) Double/Float variable decimal points in swift

我正在尝试减少这个简单函数的小数点,它 return 某些东西的概率,但我了解到我需要将 Double 转换为 String 然后减少小数点和 return 结果视图中的字符串值。

有什么方法可以强制 Double 变量(或其他更简单的方法)在 swift 5.1 的结果中仅显示 2 个小数点?

    @State var pairCount = 0
    @State var rollCount = 0
    @State var pairChance : Double = 0


     Text("\(pairChance)    %")

     Button(action: {            
                      self.pairChance = Double(self.pairCount) / Double(self.rollCount) * 100.0
                      })

您可以使用 NumberFormatter:

@State var pairCount = 1.0
@State var rollCount = 3.0
@State var pairChance = "" // this should be a string, because numbers don't have a format. Strings do.

let formatter = { () -> NumberFormatter in
    let f = NumberFormatter()
    f.maximumFractionDigits = 2
    f.numberStyle = .percent
    return f
}()

var body: some View {
    VStack {
        Text("\(pairChance)")
        Button(action: {
            // here we format it
            if let formatted = self.formatter.string(for: (self.pairCount / self.rollCount)) {
                self.pairChance = formatted
            }
        }) {
            Text("Button")
        }
    }
}

SwiftUI 的文本视图有一个可选的 specifier 参数,让我们可以自定义数据在标签内的呈现方式。

@State var pairCount = 2
@State var rollCount = 3
@State var pairChance : Double = 0
var body: some View {
    VStack {
        Text("\(pairChance, specifier: "%.2f")%")
        Button(action: {
             self.pairChance = Double(self.pairCount) / Double(self.rollCount) * 100.0
        }) {
            Text("Calculate")
        }
    }
}