UIStepper.value变成科学计数法
UIStepper.value becomes scientific notation
这是我的代码:
@IBAction func stepperChanged(sender: AnyObject) {
let stepper = sender as! UIStepper
stepper.stepValue = 0.1
stepper.minimumValue = 0.0
stepper.maximumValue = 1.0
print("stepper value: \(stepper.value)")
}
当我一直按减号按钮时,输出是:
stepper value: 0.2
stepper value: 0.1
stepper value: 1.38777878078145e-16
stepper value: 0.0
为什么 1.38777878078145e-16
在 0.1 和 0.0 之间?
我想知道原因以及如何解决。
谢谢!
请尝试最小值为 0,最大值为 10。
override func viewWillAppear(animated: Bool) {
sampleUIStepper.minimumValue = 0
sampleUIStepper.maximumValue = 10
sampleUIStepper.stepValue = 1
}
将 UIStepper 的发送器值转换为所需格式并使用它。
@IBAction func sampleStepperValueChanged(sender: AnyObject) {
let stepper = sender as! UIStepper
let convertedValue = (stepper.value/10) as Double
print(convertedValue)
}
Double
不准确。
UIStepper.value
的类型是Double
。而Double
s的精度只有16-17位。这意味着在这段代码中,result
不等于 0.1:
let a = 0.3
let b = 0.2
let result = a - b
// result might be 0.1000000000000000007890778643
所以当你点击减号按钮时,代码中某处有这样的语句:
value -= stepValue
因为stepValue
也是Double
,所以不准确。发生的情况是,当您第三次单击它时,步长值可能等于 0.9999999999999999138777878078145。因此,步进器的值不是0。
另一个可能的解释是 value
不准确,它可能是 0.1000000000000000861222121021854
记住,编程不是数学。
如何解决这个问题?
所以你想在接近 0 时禁用减号按钮,对吗?很简单!
if stepper.value - 0 < 0.0000001 {
stepper.value = 0
}
这是我的代码:
@IBAction func stepperChanged(sender: AnyObject) {
let stepper = sender as! UIStepper
stepper.stepValue = 0.1
stepper.minimumValue = 0.0
stepper.maximumValue = 1.0
print("stepper value: \(stepper.value)")
}
当我一直按减号按钮时,输出是:
stepper value: 0.2
stepper value: 0.1
stepper value: 1.38777878078145e-16
stepper value: 0.0
为什么 1.38777878078145e-16
在 0.1 和 0.0 之间?
我想知道原因以及如何解决。
谢谢!
请尝试最小值为 0,最大值为 10。
override func viewWillAppear(animated: Bool) {
sampleUIStepper.minimumValue = 0
sampleUIStepper.maximumValue = 10
sampleUIStepper.stepValue = 1
}
将 UIStepper 的发送器值转换为所需格式并使用它。
@IBAction func sampleStepperValueChanged(sender: AnyObject) {
let stepper = sender as! UIStepper
let convertedValue = (stepper.value/10) as Double
print(convertedValue)
}
Double
不准确。
UIStepper.value
的类型是Double
。而Double
s的精度只有16-17位。这意味着在这段代码中,result
不等于 0.1:
let a = 0.3
let b = 0.2
let result = a - b
// result might be 0.1000000000000000007890778643
所以当你点击减号按钮时,代码中某处有这样的语句:
value -= stepValue
因为stepValue
也是Double
,所以不准确。发生的情况是,当您第三次单击它时,步长值可能等于 0.9999999999999999138777878078145。因此,步进器的值不是0。
另一个可能的解释是 value
不准确,它可能是 0.1000000000000000861222121021854
记住,编程不是数学。
如何解决这个问题?
所以你想在接近 0 时禁用减号按钮,对吗?很简单!
if stepper.value - 0 < 0.0000001 {
stepper.value = 0
}