IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Fonction arrondi - roundTo(number, digits)


Sujet :

JavaScript

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Par d�faut Fonction arrondi - roundTo(number, digits)
    Bonjour,
    Je voudrais modifier ma fonction roundTo() pour qu'elle incr�mente 0 si besoin.

    Code JS : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
        function roundTo(number, digits) {
            if (number !== undefined && !isNaN(number)) {
                var scale = Math.pow(10, digits);
                return Math.round(number * scale) / scale;
            } else {
                return "-";
            }
        }

    J'aimerais connaitre votre m�thode pour g�rer un arrondi qui pourrait incr�menter un/des zero(s) si besoin sans passer par la m�thode .toFixed().

    La fonction ci dessus fait le job parfaitement, sauf qu'elle "zappe" les zeros ...

    Code JS : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    roundTo(15.26, 1) // 15.3
    roundTo(15.26, 2) // 15.26
    roundTo(15.26, 3) // 15.260     <-- 0 non géré affiche 15.26

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Salut,

    Ben pourquoi ne pas utiliser la fonction .toFixed() ?

    Sinon vite fait j'ai ajout� quelque lignes � ton code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      function roundTo(number, digits) {
            if (number !== undefined && !isNaN(number)) {
                var scale = Math.pow(10, digits);
                var res = Math.round(number * scale) / scale;
     
                var diff = digits - res.toString().split(".")[1].length ;
                if(diff > 0) {
                  return (res + "0".repeat(diff));
                }
                else return res;
     
            } else {
                return "-";
            }
        }
     
    console.log(roundTo(15.26, 1), // 15.3
    roundTo(15.26, 2), // 15.26
    roundTo(15.26, 3), // 15.260 
    roundTo(15.26, 7)) // 15.2600000
    �a marche mais en reprenant tout depuis le d�but on pourrait probablement optimiser tout �a...
    Je laisse � d'autres pour l'instant...

  3. #3
    Membre extr�mement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par d�faut
    tu utilises un mauvais vocabulaire.
    En informatique, l'incr�mentation est l'op�ration qui consiste � ajouter 1 (et par extension toute valeur enti�re fix�e) � un compteur. L'op�ration inverse, la d�cr�mentation, consiste � retirer 1 (ou toute valeur enti�re fix�e) au compteur.
    https://fr.wikipedia.org/wiki/Incr%C3%A9mentation

    Ce que tu d�sires faire, c'est de forcer l'affichage sur trois digits apr�s la virgule.

    Seulement voila, c'est avant tout une question de typage: pour les nombres et par d�faut JS n'affiche pas les z�ros superflus apr�s la virgule.
    le seul moyen c'est d'utiliser la m�thode .toFixed(N)ou alors tu transforme ton nombre en string (.toString() ) mais cela complique plus les choses par la suite.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function roundTo(number, digits) {
      let P10 =  Math.pow(10, digits);
      return isNaN(number) ? '-' : (Math.round(number * P10) / P10).toFixed(digits);
    }
    var num1 = 15.26;
     
    console.log ( roundTo(num1 , 3) );    // => 15.260
    Qu'est-ce qu'elle � de si affreux cette m�thode .toFixed(N) ??

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par Beginner. Voir le message
    �a marche mais en reprenant tout depuis le d�but on pourrait probablement optimiser tout �a...
    Je laisse � d'autres pour l'instant...
    Ah la condition n'est pas n�cessaire, on peut donc raccourcir un peu (toujours en partant de ton code) :

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function roundTo(number, digits) {
      if (number !== undefined && !isNaN(number)) {
        var scale = Math.pow(10, digits);
        var res = Math.round(number * scale) / scale;
        var diff = digits - res.toString().split(".")[1].length;
        return (res + "0".repeat(diff));
     
      } else {
        return "-";
      }
    }
     
    console.log(roundTo(15.26, 1), // 15.3
      roundTo(15.26, 2), // 15.26
      roundTo(15.26, 3), // 15.260
      roundTo(15.26, 7)) // 15.2600000

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Par d�faut
    Ok merci � vous 2.

    Je m'y replonge demain l� y'a plus rien qui rentre ...
    N�anmoins j'ai capt� que ce que je voulais mettre en place n'est pas possible va falloir que je retravaille le truc.

  6. #6
    Membre averti
    Homme Profil pro
    Ing�nieur
    Inscrit en
    Septembre 2015
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 36
    Par d�faut
    La m�thode toFixed accomplit tr�s exactement ce que tu veux obtenir, � savoir arrondir un nombre � la ni�me d�cimale et renvoyer une chaine de caract�res avec n d�cimales... Inutile de passer par Math.pow et Math.round si ton but est de r�cup�rer une chaine de caract�re.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    const a = 15.26;
    console.log(a.toFixed(0)); // 15
    console.log(a.toFixed(1)); // 15.3
    console.log(a.toFixed(2)); // 15.26
    console.log(a.toFixed(3)); // 15.260
    console.log(a.toFixed(4)); // 15.2600
    C'est un exercice? C'est pour �a que tu ne peux pas utiliser toFixed?

  7. #7
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    Un autre possibilit� est de g�rer un affichage sous forme de string ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Par d�faut
    Bon bah je sais pas ce que j'avais en t�te hier soir mais je craquais compl�tement ...

    J'ai simplement ajout� .toFixed(digits) dans ma fonction et �a fait le job parfaitement (pour l'instant et pas d'erreurs dans la console)

    Code JS : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    function roundTo(number, digits) {
        if (number !== undefined && !isNaN(number)) {
            var scale = Math.pow(10, digits);
            return (Math.round(number * scale) / scale).toFixed(digits);
        } else {
            return "-";
        }
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [XL-97] Fonction arrondi
    Par Emily2711 dans le forum Macros et VBA Excel
    R�ponses: 5
    Dernier message: 10/09/2009, 09h19
  2. Fonction arrondi supp�rieur
    Par mims1664 dans le forum Requ�tes
    R�ponses: 2
    Dernier message: 30/08/2009, 19h35
  3. ABAP fonction arrondi
    Par kitty2006 dans le forum SAP
    R�ponses: 6
    Dernier message: 10/12/2007, 19h42
  4. pb fonction arrondi avec une requ�te
    Par lbailler dans le forum Requ�tes et SQL.
    R�ponses: 2
    Dernier message: 15/08/2007, 00h46
  5. Fonction arrondie sup�rieur
    Par Sebimpro dans le forum Access
    R�ponses: 3
    Dernier message: 08/08/2006, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo