La saisie de nombre â virgule dans calculatrice

Bonsoir
Dans l’application calculatrice on ne peut pas utiliser la fonction DotSet, pour gérer la saisie des nombres à virgules ?
Faut-il faire une fonction séparée qui va gérer la la saisie de lnombres à virgule ?

Salut Stéphan,

Il existe plusieurs moyens de gérer les nombres à virgule.
Tu peux tout simplement faire une action sur un nouveau bouton virgule.
Pour le didSet dont tu parles je ne suis pas certain de comprendre ce que tu veux dire :slight_smile:

Bonjour Maxime,

Voilà pour :

@IBAction func() _numberDecimal {

}
Maintenant le plus compliqué c’est de récupérer la partie décimale du double ?

Oui c’est pour ça que je ne l’ai pas fait dans la première partie du cours. Il n’y a rien d’insurmontable mais ça complexifie l’app et comme il s’agit du premier chapitre je ne voulais pas décourager les débutants.
Encore une fois il existe plusieurs moyens de le faire.Garde à l’esprit que les saisies se font chiffre par chiffre donc par exemple, si la personne a tapé le chiffre 5, puis la virgule et le chiffre 8 tu dois alors obtenir 5.8
Soit 5 + (8/10).
Si elle tape un autre chiffre 2 après la virgule il faut encore l’ajouter à la fin :
5 + (8/10) + (2/100) -> 5,82

1 « J'aime »

J’ai bien compris ton explication mais je n’y arrive pas.
Depuis hier je suis dessus, mais le bloque.

Tu pourrais m’aiguiller un peu STP ?

Voici la partie du code :

@IBAction func numberDecimal(_ sender: UIButton) {
_shouldNumDecimal = true
_numdecim = _currentNumber
//ui_currentNumberLabel.text = « (_numdecim) »
}

@IBAction func digitButtonTouchedUpInside(_ sender: UIButton) {
if _shouldNumDecimal == true {
_currentNumber = (_currentNumber + Double(sender.tag) / 10 )
}
else if _shouldResetCurrentNumber == true {
_currentNumber = Double(sender.tag)
_shouldResetCurrentNumber = false
}
else { _currentNumber = (_currentNumber * 10 ) + Double(sender.tag)
}
}

Bon j’ai fini par y arriver.
Voici mon code :

//
// ViewController.swift
// ABCalc
//
// Created by Alban BERNARD on 07/09/2017.
// Copyright © 2017 AB Production :). All rights reserved.
//

import UIKit

class ViewController: UIViewController {
var _shouldResetCurrentNumber = true
var _shouldNumDecimal = false
var _operationType : Character = " "
var _decim : Double = 1
var _numdecim : Double = 0
var _previousNumber : Double = 0
var _currentNumber : Double = 0 {
didSet {ui_currentNumberLabel.text = “(_currentNumber)”
}
}

func resetdecimal () {
    _shouldNumDecimal = false
    _decim = 1
    _numdecim = 0
}

func performWaitingCalculous() {
let result:Double
    if _operationType == "+" {
        result = _previousNumber + _currentNumber
    } else if _operationType == "-" {
        result = _previousNumber - _currentNumber
    } else if _operationType == "*" {
        result = _previousNumber * _currentNumber
    } else if _operationType == "/" {
        result = _previousNumber / _currentNumber
    } else { result = _currentNumber
    }
     ui_currentNumberLabel.text = "\(result)"
    _previousNumber = result
    _shouldResetCurrentNumber = true
}

@IBOutlet weak var ui_currentNumberLabel: UILabel!

@IBAction func resetValueButton(_ sender: UIButton) {
    _previousNumber = 0
    _currentNumber = 0
    _operationType = " "
    resetdecimal()
}

@IBAction func changeSignButton(_ sender: UIButton) {
    if _shouldResetCurrentNumber == true {
        _currentNumber = _previousNumber}
    _currentNumber = _currentNumber * -1
    _shouldResetCurrentNumber = false
}

@IBAction func applyPercentButton(_ sender: UIButton) {
    if _shouldResetCurrentNumber == true {
        _currentNumber = _previousNumber}
    _currentNumber = _currentNumber / 100
    _shouldResetCurrentNumber = false
}

@IBAction func substractButton(_ sender: UIButton) {
    if _shouldResetCurrentNumber == false {
    performWaitingCalculous()
    }
    _operationType = "-"
    resetdecimal()
}

@IBAction func divisionButton(_ sender: UIButton) {
    if _shouldResetCurrentNumber == false {
        performWaitingCalculous()
    }
    _operationType = "/"
    resetdecimal()
}

@IBAction func multiplyButton(_ sender: UIButton) {
    if _shouldResetCurrentNumber == false {
        performWaitingCalculous()
    }
    _operationType = "*"
    resetdecimal()
}

@IBAction func additionButton(_ sender: UIButton) {
    if _shouldResetCurrentNumber == false {
        performWaitingCalculous()
    }
    _operationType = "+"
    resetdecimal()
}

@IBAction func resultButton(_ sender: UIButton) {
    performWaitingCalculous()
}

@IBAction func digitButtonTouchedUpInside(_ sender: UIButton) {
    if _shouldNumDecimal == true {
        _decim = _decim * 10
        _numdecim = Double(sender.tag)
        _currentNumber = _currentNumber + (_numdecim / _decim)
        ui_currentNumberLabel.text = "\(_currentNumber)"
    }
    else if _shouldResetCurrentNumber == true {
            _currentNumber = Double(sender.tag)
            _shouldResetCurrentNumber = false
            }
        else { _currentNumber = (_currentNumber * 10 ) + Double(sender.tag)
            }
}


@IBAction func numberDecimal(_ sender: UIButton) {
    _shouldNumDecimal = true

// _numdecim = _currentNumber
//ui_currentNumberLabel.text = “(_numdecim)”
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}