我正在开发一个板球应用程序。我希望这个数字增加0.1,但一旦达到0.5,我再次点击加号,我希望它四舍五入到整个值。
例如2.1、2.2、2.3、2.4、2.5然后跳到3.0(然后重新开始3.1、3.2、3.3等)
我的步进器现在上下移动0.1,但它包含小数点(.6、.7、.8和.9)
每次都是0.5,我需要它来汇总。减去时相同。
这是我的代码:

var oversFloat: Float = 0.0

@IBOutlet weak var displayOversLabel: UILabel!
@IBAction func OversStepper(_ sender: UIStepper) {
    let oversValue = Float(sender.value)
    displayOversLabel.text = String(oversValue)

ios - 如何以0.1递增将每个.5数字四舍五入为整数-LMLPHP

最佳答案

浮点数troublesome。你真的不应该测试一个浮点数是否与另一个值相等。在您的情况下,0.1不能用浮点数精确表示,因此,0.1增加会导致错误增加。所以你的号码可能会在你期望的时候以0.499999999结尾。
在您的情况下,您可以通过在步进器中使用整数轻松避免此问题。修改你的步进器按0.5而不是,将你的最小值和最大值乘以1。然后,当使用步进器值更新标签时,将步进器值除以0.1
对于从10跳到10并递增,以及在递减时从88.5跳到89.0,请检查一个人的数字是否为89.088.5,然后按6递增/递减步进器值:

@IBAction func oversStepper(_ sender: UIStepper) {
    let value = Int(sender.value)
    let remainder = value % 10
    if remainder == 6 {
        sender.value = Double(value + 4)
    } else if remainder == 9 {
        sender.value = Double(value - 4)
    }
    displayOversLabel.text = String(format: "%.1f", sender.value / 10)
}

通过整数值步进,不会引入误差。

10-07 19:14
查看更多