import UIKit
class ViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
var userIsInTheMiddleOfTyping : Bool = false
var usingDecimal = false
var firstNumber : Double = 0.0
var secondNumber : Double = 0.0
var result : Float = 0.0
var choosingOperator : String = ""
let π = 3.14159265359
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func clearButtonTapped(_ sender: UIButton) {
//resultLabel.text = "C"
firstNumber = 0.0
secondNumber = 0.0
result = 0.0
choosingOperator = ""
resultLabel.text = ""
usingDecimal = false
}
@IBAction func operatorButtonTapped(_ sender: UIButton) {
// +,-,/,*
if resultLabel.text != "." {
firstNumber = Double(resultLabel.text!)!
print(firstNumber)
userIsInTheMiddleOfTyping = false
choosingOperator = sender.currentTitle!
usingDecimal = false
}
}
// other operators
@IBAction func cubicOrQuadraticButtonTapped(_ sender: UIButton) {
firstNumber = Double(resultLabel.text!)!
choosingOperator = sender.currentTitle!
switch choosingOperator {
case "x²": result = Float(firstNumber * firstNumber)
case "√": result = Float(sqrt(firstNumber))
case "x³": result = Float(firstNumber * firstNumber * firstNumber)
case "∛": result = Float(cbrt(firstNumber))
default: break
}
resultLabel.text = String(result)
userIsInTheMiddleOfTyping = false
usingDecimal = false
}
@IBAction func trigButtonTapped(_ sender: UIButton) {
firstNumber = Double(resultLabel.text!)!
choosingOperator = sender.currentTitle!
switch choosingOperator {
case "sin⁻¹": result = Float(asin(firstNumber) * 180/π)
case "cos⁻¹": result = Float(acos(firstNumber) * 180/π)
case "tan⁻¹": result = Float(atan(firstNumber) * 180/π)
default: break
}
resultLabel.text = String(result)
userIsInTheMiddleOfTyping = false
usingDecimal = false
}
// Number Tapped
@IBAction func keypadButtonTapped(_ sender: UIButton) {
// resultLabel.text = "Keypad tapped"
var key = sender.currentTitle!
print(key)
if userIsInTheMiddleOfTyping == true {
if usingDecimal == true && key == "."{
key = ""
}
resultLabel.text = resultLabel.text! + key
} else {
resultLabel.text = key
userIsInTheMiddleOfTyping = true
}
if key == "." {
usingDecimal = true
}
}
// Equals tapped
@IBAction func equalsButtonTapped(_ sender: UIButton) {
// resultLabel.text = "Equals Tapped"
secondNumber = Double(resultLabel.text!)!
calculate(_operator: choosingOperator)
resultLabel.text = String(result)
userIsInTheMiddleOfTyping = false
usingDecimal = false
}
func calculate(_operator: String) {
switch _operator {
case "": result = Float(firstNumber + secondNumber)
case "": result = Float(firstNumber - secondNumber)
case "": result = Float(firstNumber * secondNumber)
case "": result = Float(firstNumber / secondNumber)
default: break
}
}
}
Hello Apple community!
I am programming a calculator app and I would like to use the NumberFormatter to change the format of larger numbers in my results label.
For example:
345906483
would than be
345'906'483
I have attempted to translate the number using the Number Formatter, which worked
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSeparator = "'"
let formattedNumber = numberFormatter.string(from: NSNumber(value: result))
print(formattedNumber!)
resultLabel.text = formattedNumber
userIsInTheMiddleOfTyping = false
usingDecimal = false
However, when I attempt to do further calculations, I have an issue:
The number that stands in my label is now a string with numbers and " ' ", my new calculation doesn't work
I then reversed this formatting at the beginning of each calculation, and then again at the end of calculation:
let numberFormatterReverse = NumberFormatter()
numberFormatterReverse.numberStyle = .none
numberFormatterReverse.usesGroupingSeparator = false
let formattedNumberReverse = numberFormatterReverse.string(from: NSNumber(value: result))
print(formattedNumberReverse!)
resultLabel.text = formattedNumberReverse
firstNumber = Double(resultLabel.text!)!
result = Float(sqrt(firstNumber))
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSeparator = "'"
let formattedNumber = numberFormatter.string(from: NSNumber(value: result))
print(formattedNumber!)
resultLabel.text = formattedNumber
userIsInTheMiddleOfTyping = false
usingDecimal = false
I am sure that this is too complicated and I would appreciate some assistance!
Thanks in advance :-)