Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tronquer un nombre avec le bon nombre de zéros

Sujet résolu
    17 janvier 2019 à 8:21:31

    Bonjour,

    J'aimerais savoir si il existait une fonction permettant de tronquer un nombre en ayant le bon nombre de zéros.

    Je m’explique:

    J'ai le chiffre 1823.00000000111

    Je veux tronquer ce nombre 3 chiffres après la virgule c'est à dire : 1823, 000

    Cependant lorsque je tronque ce chiffre en faisant round() il me sort 1823.

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2019 à 11:23:02

      Multiplier par 1000, tronquer (ou arrondir ?), diviser par 1000.

      -
      Edité par michelbillaud 17 janvier 2019 à 11:23:22

      • Partager sur Facebook
      • Partager sur Twitter
        17 janvier 2019 à 12:25:16

        Pour arrondir à 3 chiffres après la virgule :

        round(nombre, 3)

        Pour tronquer à 3 chiffres après la virgule :

        int(1000 * nombre) / 1000




        -
        Edité par thelinekioubeur 17 janvier 2019 à 12:25:55

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2019 à 13:16:42

          Merci de vos réponses.

          Cependant cela ne marche pas.

          Je n'arrive toujours pas à tronquer ce chiffre (par ex):

          0.23777000001 ----> 0.237700

          Ca me donne 0.2377 donc sans les zéros alors que je les veux

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 janvier 2019 à 13:34:38

            num = 42.42000042
            repr_num = f"{num:.4F}" # "42.4200"
            
            • Partager sur Facebook
            • Partager sur Twitter
              17 janvier 2019 à 13:51:58

              Si c'est juste une question d'affichage, tu as des options pour gérer ça avec la méthode format : https://www.programiz.com/python-programming/methods/string/format

              Par exemple :

              >>> print("{:.3f}".format(5.0))
              5.000
              

              -
              Edité par LoupSolitaire 17 janvier 2019 à 13:52:12

              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                18 janvier 2019 à 8:17:35

                Le problème avec ce type d'affichage c'est que si je fais:

                print("{:3f}".format(12.5))
                
                >>> 12.500
                Alors que je veux:
                12.5

                En faite c'est lorsqu'un nombre est comme celui-ci : 12.4550000001.. (donc lorsqu'il n'est pas finit) que je veux laisser les zéros cependant si le nombre est finit comme 12.5 alors on le laisse tel quel.

                -
                Edité par TheoCerutti 18 janvier 2019 à 8:17:58

                • Partager sur Facebook
                • Partager sur Twitter
                  18 janvier 2019 à 8:23:39

                  On t'a donné  deux aspects

                  • comment tronquer ou arrondir un nombre à un certain nombre de décimales 
                  • comment présenter un nombre en imposant un nombre de décimales.

                  Tu veux juste arrondir, alors fais-le.

                  PS au passage, dans ton sujet tu parlais de "nombre de zéros", et tu n'étais pas content que 1823.00001 tronqué/arrondi s'affiche 1823 et pas 1823.000. Faudrait un peu savoir.

                  Rappel : 1823.000 n'est pas différent de 1823.

                  -
                  Edité par michelbillaud 18 janvier 2019 à 8:27:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 janvier 2019 à 10:56:20

                    Le problème est que l'auteur veut garder des chiffres significatifs si le nombre n'était pas exact. 

                    Donc si le nombre est 12.5 rajouter des 0 fausserait la signification.

                    J'ai fais un petit code qui prend en compte si le nombre a moins de 3 chiffres après la virgule :

                    def truncate(x,digits):
                        if len(str(x).split('.')[1])<=3:
                            return x
                        else :
                            return '%.3f'%x
                    
                    print(truncate(12.5,3))
                    print(truncate(12.50518000001,3))



                    • Partager sur Facebook
                    • Partager sur Twitter
                    HOPE
                      18 janvier 2019 à 16:11:50

                      Merci loumierex c'est exactement ce qu'il me fallait !

                      Désolé de m'être mal fait comprendre pour les autres..

                      Je passe en résolu.

                      EDIT: Juste une petite dernière question peut on formater selon une variable c'est à dire :

                      param = 3
                      print("%.paramf", 12.2830232803);
                      
                      >>> 12.283

                      -
                      Edité par TheoCerutti 18 janvier 2019 à 16:26:55

                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 janvier 2019 à 16:39:41

                        Je suis pas sur,

                        en revanche tu peux toujours le faire en travaillant en string et en comptant le nombre de chiffre à partir du point. Dans ce cas le nombre sera dynamique, mais tu perdras sans doute un poil en performances du fait des opérations supplémentaires

                        • Partager sur Facebook
                        • Partager sur Twitter
                        HOPE
                          18 janvier 2019 à 16:52:47

                          Désolé je ne comprends pas bien

                          EDIT : non c'est bon j'ai trouvé:

                          def truncate(x0, param):
                              if len(str(x0).split('.')[1]) <= param.n:
                                  return x0
                              else:
                                  return '%.{n}f'.format(n = param.n) % x0



                          -
                          Edité par TheoCerutti 18 janvier 2019 à 17:06:29

                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 janvier 2019 à 17:01:13

                            Converti ton nombre en chaine de caractère, et travaille sur la chaine de caractères au lieu du nombre.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Blond, bouclé, toujours le sourire aux lèvres...

                              18 janvier 2019 à 17:22:19

                              loumierex a écrit:

                              Je suis pas sur,

                              en revanche tu peux toujours le faire en travaillant en string et en comptant le nombre de chiffre à partir du point. Dans ce cas le nombre sera dynamique, mais tu perdras sans doute un poil en performances du fait des opérations supplémentaires


                              Dans ce genre de contexte, les performances on s'en fiche : il s'agit de produire un résultat, et il faudra bien laisser à l'utilisateur le temps de le lire.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 janvier 2019 à 17:49:55

                                Pas forcément parce qu'on ignore sur quelle quantité de données le calcul doit être mis en place.

                                Si je me retrouve à devoir faire des ajustements sur 15 millions de lignes je serai content de savoir que la methode 1 m'épargne un certain temps. 

                                Si le temps n'est pas un impératif alors libre à toi d'implémenter la méthode qui te convient le mieux.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                HOPE
                                  18 janvier 2019 à 18:16:30

                                  loumierex a écrit:

                                  Pas forcément parce qu'on ignore sur quelle quantité de données le calcul doit être mis en place.

                                  Si je me retrouve à devoir faire des ajustements sur 15 millions de lignes je serai content de savoir que la methode 1 m'épargne un certain temps. 

                                  Si le temps n'est pas un impératif alors libre à toi d'implémenter la méthode qui te convient le mieux.


                                  Si on a besoin de produire 15 millions de lignes, soit quelques centaines de milliers de pages de texte (*) qu'on est sensible aux questions de performances, on va peut être pas le faire en Python.

                                  (*) une pile de ramettes de papiers de 100 m de haut ?

                                  -
                                  Edité par michelbillaud 18 janvier 2019 à 18:17:42

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Tronquer un nombre avec le bon nombre de zéros

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown