0

I have a piece of code for my calculator.

And there is a stepper in the settings.

How can I make it so that when the user presses a stepper on 2 then the answer in the calculator would be rounded to 2 numbers after the decimal point?


Now there is a rounding up to 9 numbers after the decimal point.

displayResultLabel.text = String(format: "%.9f", newValue)


MainViewController.swift

var currentInput: Double {
    get {
        return Double (displayResultLabel.text!)!
    }
    set {
        let value = "\(newValue)"
        let ValueArray = (value.components(separatedBy:"."))
        if ValueArray[1] == "0" {
            displayResultLabel.text = "\(ValueArray[0])"
        } else {
            displayResultLabel.text = String(format: "%.9f", newValue)
              //displayResultLabel.text = "\(newValue)"
        }
        stillTyping = false
    }
}

SettingsViewController.swift

@IBOutlet weak var Stepr1: UIStepper!

@IBAction func stepperValueChanged(sender: UIStepper) {
    //let am = NSNumber(value: sender.value)
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    UserDefaults.standard.set(sender.value, forKey: Savings)
    //stepperValueChanged(sender: Stepr1)
    MAXLabel.text = Int(sender.value).description
        let userDefaults = UserDefaults.standard
        userDefaults.setValue(MAXLabel.text, forKey: "data")
        userDefaults.synchronize()
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Save value
    if let Savings = UserDefaults.standard.value(forKey: Savings) {
        Stepr1.value = Savings as! Double
        stepperValueChanged(sender: Stepr1)
    }
}

jscs
  • 63,694
  • 13
  • 151
  • 195
B2Fq
  • 876
  • 1
  • 8
  • 23

1 Answers1

2

You can use String Interpolation in the format String:

let places = Int(Stepr1.value)
displayResultLabel.text = String(format: "%.\(places)f", newValue)

Note: This will always use . as the decimal separator even if the user's locale specifies ,. Use NumberFormatter to take locale into account as shown by this answer.

vacawama
  • 150,663
  • 30
  • 266
  • 294
  • 2
    Does this format correctly based on the user's locale? – rmaddy Nov 22 '17 at 18:34
  • @rmaddy, no not unless your locale uses `.` as the separator. LeoDabus' answer in the linked [duplicate] uses `NumberFormatter` which does take locale into account. – vacawama Nov 22 '17 at 18:52