我正在开发一个板球应用程序。我希望这个数字增加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)
最佳答案
浮点数troublesome。你真的不应该测试一个浮点数是否与另一个值相等。在您的情况下,0.1
不能用浮点数精确表示,因此,0.1
增加会导致错误增加。所以你的号码可能会在你期望的时候以0.499999999
结尾。
在您的情况下,您可以通过在步进器中使用整数轻松避免此问题。修改你的步进器按0.5
而不是,将你的最小值和最大值乘以1
。然后,当使用步进器值更新标签时,将步进器值除以0.1
。
对于从10
跳到10
并递增,以及在递减时从88.5
跳到89.0
,请检查一个人的数字是否为89.0
或88.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)
}
通过整数值步进,不会引入误差。