Récupérer une valeur dans une fonction

Bonjour,
J'essaye d'arrondir un nombre deux chiffres après la virgule.
J'ai trouvé cette solution qui fonctionne mais je n'arrive pas à extraire le résultat de la fonction.
J'imagine qu'il faut la passer dans une variable en utilisant le type "return" au lieu de "print" et affecter des paramètres à ma fonction.
J'ai essayé pas mal de trucs et la je sèche.
Pourriez-vous me donner une piste s'il vous plait ?
Voici une capture du playground.
Merci à vous :)

Réponses

  • CéroceCéroce Membre, Modérateur
    mai 2019 modifié #2

    C'est comme une fonction en mathématique:
    y = f(x)

    func stringRounding(number: Double) -> String {
        return String(format: "0.2f", number)
    }
    

    Ceci dit, il faut sans doute plutôt utiliser un NumberFormatter ou une de ses sous-classes dans ce cas, qui respectent les réglages, notamment sur le format des nombre. Par exemple en France, la virgule comme séparateur décimal, et l'espace insécable pour grouper les milliers.

  • DrakenDraken Membre

    Comme l'explique Ceroce, l'affichage d'un nombre dépend de la langue. Les français utilisent la virgule, pour séparer les parties entières et fractionnaires d'un nombre, alors que les anglo-saxons emploient le point décimal.

    France -> 5,64
    USA -> 5.64

    En pratique les développeurs utilisent le . décimal, parce que les langages de programmation le font de base (ils ont tous été conçus de l'autre coté de l'atlantique).

    NumberFormatter est une classe évoluée permettant d'afficher un nombre en fonction de n'importe quelle langue et des convention locales. Tu n'en n'a probablement pas besoin dans une phase d'apprentissage, mais penses-y si tu comptes diffuser une application à l'internationale.

  • PyrohPyroh Membre
    mai 2019 modifié #4

    @Draken a dit :
    En pratique les développeurs utilisent le . décimal, parce que les langages de programmation le font de base (ils ont tous été conçus de l'autre coté de l'atlantique).

    Alors pas tous. Et la virgule a d'autres utilités bien plus logiques dans un code source, c'est surtout pour ça.

  • DrakenDraken Membre

    @Pyroh a dit :

    Alors pas tous. Et la virgule a d'autres utilités bien plus logiques dans un code source, c'est surtout pour ça.

    Je ne suis pas persuadé que Bill Gates ai eu ce genre de subtilité en tête, en concevant le premier basic Microsoft !

    Et j'avoue être curieux de connaître le nom d'un langage n'utilisant pas de point décimal pour définir un flottant.

  • PyrohPyroh Membre

    @Draken -> Le Alors pas tous. faisait référence au fait que tous les langages ne sont pas créés de l'autre côté de l'atlantique. Après comme je dis que la virgule est très utilisée pour d'autres raisons il est peut probable qu'elle soit utilisée pour marquer la décimale dans un nombre. Même le Eiffel utilise le . c'est dire...

  • Bonjour à vous, merci pour vos réponses.

    @Céroce Est-ce que je dois compléter la fonction que tu a écrit ou bien je suis sensé pouvoir l'utiliser telle quelle ?

    @Draken Aurais-tu un lien à conseiller pour que je me renseigne sur le NumberFormatter ?

  • DrakenDraken Membre

    @Pyroh a dit :
    @Draken -> Le Alors pas tous. faisait référence au fait que tous les langages ne sont pas créés de l'autre côté de l'atlantique. Après comme je dis que la virgule est très utilisée pour d'autres raisons il est peut probable qu'elle soit utilisée pour marquer la décimale dans un nombre. Même le Eiffel utilise le . c'est dire...

    Je sais, le Kotlin sur lequel je bosse en ce moment, a été développé en République Tchèque. Le Pascal est né en Suisse. Et le Turbo Pascal de Borland, sur lequel j'ai appris la programmation structurée dans ma jeunesse, a été conçu par un Danois. Mais les archétypes de base, les principes fondamentaux sur lesquelles repose tous les langages viennent des USA. Même le système mécanographique des nazis, utilisé pour cartographier les lignées génétiques juives à la fin des années 30, a été conçu par IBM (qui ne s'en vante pas ).

  • DrakenDraken Membre

    @mbprotb94 a dit :
    Bonjour à vous, merci pour vos réponses.

    @Draken Aurais-tu un lien à conseiller pour que je me renseigne sur le NumberFormatter ?

    https://developer.apple.com/documentation/foundation/numberformatter

  • Impeccable @Céroce ça fonctionne.

    Petite question en parallèle, quand on lance le simulateur et que l'on écrit avec le clavier du mac, sur l'application nous sommes en qwerty et non pas en azerty. Ca se règle dans xCode ?

    PS : petite capture du code

  • LarmeLarme Membre
    Ça se règle dans les paramètres du Simulateur.
    Si tu tapes dans le SearchHelp keyboard, tu devrais trouver un setting qui prend la locale du Mac
  • @mbprotb94 a dit :

    Petite question en parallèle, quand on lance le simulateur et que l'on écrit avec le clavier du mac, sur l'application nous sommes en qwerty et non pas en azerty. Ca se règle dans xCode ?

    Le simulateur est un device iOS comme un autre. Par défaut il configuré en anglais. Si tu veux qu’il fonctionne en français (clavier Azerty et tout le reste) tu dois modifier les réglages, exactement comme si c’etait un vrai device et non une application sur ton Mac.

  • LarmeLarme Membre

    Hardware/Keyboard/Use the same keyboard Language as macOS

  • Merci @Larme

    @Céroce je vois ce que tu voulais dire dans ton premier message.
    J'ai passé le simulateur en Fr et du coup le clavier affiche une virgule et non plus un point. Résultat, l'appli ne marche plus GRrrrrr
    J'ai du repassé en UK.
    Je vais regarder tout ça prochainement...

  • Joanna CarterJoanna Carter Membre, Modérateur

    Comme on a déjà dit, arrêtes d'utiliser String(format:_) !!! NumberFormatter s'occupe de tous ce problèmes.

  • Merci d'insister @Joanna Carter mais comme je l'ai dis à mainte reprise, je suis débutant et n'ai donc aucune idée de ce qu'est NumberFormatter ni de comment ça fonctionne (je ne sais même pas si j'ai une action à faire pour ça). Pour le moment j'essaye simplement de comprendre ce que je fais... petit à petit.

  • Joanna CarterJoanna Carter Membre, Modérateur

    Tout d'abord, il faut régler la région dans le simulateur pour avoir les résultats différents.

    func stringRounding(number: Double, roundingPlaces: Int) -> String
    {
        let numberFormatter = NumberFormatter()
    
        numberFormatter.locale = Locale.autoupdatingCurrent
    
        numberFormatter.minimumFractionDigits = roundingPlaces
    
        numberFormatter.maximumFractionDigits = roundingPlaces
    
        if let string = numberFormatter.string(for: 123.456)
        {
          print(string)
        }
    }
    
      {
        if let string = stringRounding(number: 123.456, roundingPlaces: 2)
        {
          print(string)
        }
      }
    

    Mais tu aurais pu le trouver en faisant une recherche en Google ;)

Connectez-vous ou Inscrivez-vous pour répondre.