UIStepper.value成为科学记数法

时间:2016-05-06 04:08:15

标签: ios swift double scientific-notation uistepper

这是我的代码:

@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之间?

我想知道原因以及如何解决它。

谢谢!

2 个答案:

答案 0 :(得分:4)

请将最小值设为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)

    }

答案 1 :(得分:1)

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
}