none
faire un arrondi dans un resultat avec vb2010 RRS feed

  • Question

  •  bonjour

    un autre petit soucis

    comment faire un arrondi sur le résultat d'une multiplication ou division  pour cela je voudrais arrondir au chiffre supérieur si résultat est de type 2.56 pour l’arrondir à trois et si 2.15 l'arrondir à 2.5

    merci de m'aider

    mercredi 1 juillet 2015 13:46

Réponses

  • Bonjour,

    Vous pouvez utiliser Math.Ceiling (https://msdn.microsoft.com/fr-fr/library/System.Math.Ceiling(v=vs.110).aspx)

    Bien cordialement,


    Fabrice JEAN-FRANCOIS, Novencia TS

    • Marqué comme réponse SIMONGEORGES jeudi 2 juillet 2015 14:21
    mercredi 1 juillet 2015 13:58
  • Oups, j'ai mal lu... Oubliez le Ceiling car cous voulez arrondir à 3 dans un cas... Mais à 2.5 dans l'autre ??!??

    Vous êtes sûr, sûr, sûr car c'est plutôt rare. On s'attendrait à 2.6 et 2.2 pour le chiffre supérieur (en faisant un Math.Round(d,1) ou d est votre double).

    • Marqué comme réponse SIMONGEORGES jeudi 2 juillet 2015 14:21
    mercredi 1 juillet 2015 14:06
  • Re-bonjour,

    Voici les informations demandées :

    - Math.Ceiling est un arrondi vers le haut.
    - Math.Floor est un arrondi vers le bas.
    - Math.Truncate est une troncature. Il coupe net et oublie les chifres après la virgule.

    Quel différence entre tout ça?
    Tout dépend si les nombres sont positifs ou négatif.

    Exemple .
    Math.Floor(2.4)= 2    //On prend le plancher
    Math.Floor(-2.4)= -3  //Là aussi, on prend le plancher, c'est à dire l'entier juste avant -2.4 (sur un axe d'abscisse, -3 est avant -2.4)


    Math.Ceiling(2.4)= 3 //On prend le plafond
    Math.Ceiling(-2.4)= -2  //Là aussi, on prend le plafond, c'est à dire l'entier juste après -2.4 (sur un axe d'abscisse -2 est après -2.4


    Math.Truncate(2.4) = 2
    Math.Truncate(-2.4) = 2


    Il y a maintenant aussi le Math.Round, qui lui fait un arrondi à l'entier le plus proche ou à un nombre de chiffre après la virgule.
    Exemple :
    Math.Round(2.56) = 3 // On ne précise pas les chiffres après la virgule. Il arrond à l'entier le plus proche. On est ici plus proche de 3
    Math.Round(-2.56) = -3 //On est ici plus proche de -3


    Math.Round(2.56,1) = 2.6 // On demande un arrondi avec 1 chiffre après la virgule. On se rapproche ici de 2.6
    Math.Round(-2.56,1) = -2.6 // On demande un arrondi avec 1 chiffre après la virgule. On se rapproche ici de -2.6


    Enfin, il y a le cas où l'on tombe pile poil au milieu. Par exemple, 2.5, faut-il l'arrondir à 3 ou à 2.
    Pour se faire, on précise le MidpointRounding

    Exemple :
    Math.Round (2.5, MidpointRounding.ToEven) //renvoie 2
    Math.Round(2.5,MidpointRounding.AwayFromZero) // renvoie 3

    Concernant votre implémentation spécifique consistant à prendre l'entier supérieur si on dépasse 0.5 au niveau des décimales et arrondir à 0.5 en dessous, voici ce que je ferais :

    namespace MyApplication
    {
        public static class MyConversion
        {
            public static double SpecificRound(this double number)
            {
                //  Nombre sans la virgule
                double nb = Math.Truncate(number);
    
                // On obtient la valeur après la virgule
                double deci = number - Math.Truncate(nb);
    
                if (deci <= 0.5)
                    return nb + 0.5;
                else
                    return nb + 1;
    
            }
        }
    
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>     
            static void Main()
            {
    
                System.Diagnostics.Debug.WriteLine(2.56.SpecificRound()); //Retourne 3
                System.Diagnostics.Debug.WriteLine(2.15.SpecificRound()); //Retourne 2.5
    
                double n = 1.14;
                System.Diagnostics.Debug.WriteLine(n.SpecificRound()); //Retourne 1.5
    
                n = 1.74;
                System.Diagnostics.Debug.WriteLine(n.SpecificRound()); //Retourne 2
            }
        }
    }
    

    • Marqué comme réponse SIMONGEORGES vendredi 3 juillet 2015 08:54
    jeudi 2 juillet 2015 14:41
  • bonjour merci de votre réponse je connais pas le celling les arrondis c'est pour obtenir  soit 2.5 ou 3 voila et je sais pas comment faire pouvez vous m"expliquer davantage  merci d'avance
    • Marqué comme réponse SIMONGEORGES jeudi 2 juillet 2015 14:21
    jeudi 2 juillet 2015 05:38

Toutes les réponses

  • Bonjour,

    Vous pouvez utiliser Math.Ceiling (https://msdn.microsoft.com/fr-fr/library/System.Math.Ceiling(v=vs.110).aspx)

    Bien cordialement,


    Fabrice JEAN-FRANCOIS, Novencia TS

    • Marqué comme réponse SIMONGEORGES jeudi 2 juillet 2015 14:21
    mercredi 1 juillet 2015 13:58
  • Oups, j'ai mal lu... Oubliez le Ceiling car cous voulez arrondir à 3 dans un cas... Mais à 2.5 dans l'autre ??!??

    Vous êtes sûr, sûr, sûr car c'est plutôt rare. On s'attendrait à 2.6 et 2.2 pour le chiffre supérieur (en faisant un Math.Round(d,1) ou d est votre double).

    • Marqué comme réponse SIMONGEORGES jeudi 2 juillet 2015 14:21
    mercredi 1 juillet 2015 14:06
  • bonjour merci de votre réponse je connais pas le celling les arrondis c'est pour obtenir  soit 2.5 ou 3 voila et je sais pas comment faire pouvez vous m"expliquer davantage  merci d'avance
    • Marqué comme réponse SIMONGEORGES jeudi 2 juillet 2015 14:21
    jeudi 2 juillet 2015 05:38
  • Re-bonjour,

    Voici les informations demandées :

    - Math.Ceiling est un arrondi vers le haut.
    - Math.Floor est un arrondi vers le bas.
    - Math.Truncate est une troncature. Il coupe net et oublie les chifres après la virgule.

    Quel différence entre tout ça?
    Tout dépend si les nombres sont positifs ou négatif.

    Exemple .
    Math.Floor(2.4)= 2    //On prend le plancher
    Math.Floor(-2.4)= -3  //Là aussi, on prend le plancher, c'est à dire l'entier juste avant -2.4 (sur un axe d'abscisse, -3 est avant -2.4)


    Math.Ceiling(2.4)= 3 //On prend le plafond
    Math.Ceiling(-2.4)= -2  //Là aussi, on prend le plafond, c'est à dire l'entier juste après -2.4 (sur un axe d'abscisse -2 est après -2.4


    Math.Truncate(2.4) = 2
    Math.Truncate(-2.4) = 2


    Il y a maintenant aussi le Math.Round, qui lui fait un arrondi à l'entier le plus proche ou à un nombre de chiffre après la virgule.
    Exemple :
    Math.Round(2.56) = 3 // On ne précise pas les chiffres après la virgule. Il arrond à l'entier le plus proche. On est ici plus proche de 3
    Math.Round(-2.56) = -3 //On est ici plus proche de -3


    Math.Round(2.56,1) = 2.6 // On demande un arrondi avec 1 chiffre après la virgule. On se rapproche ici de 2.6
    Math.Round(-2.56,1) = -2.6 // On demande un arrondi avec 1 chiffre après la virgule. On se rapproche ici de -2.6


    Enfin, il y a le cas où l'on tombe pile poil au milieu. Par exemple, 2.5, faut-il l'arrondir à 3 ou à 2.
    Pour se faire, on précise le MidpointRounding

    Exemple :
    Math.Round (2.5, MidpointRounding.ToEven) //renvoie 2
    Math.Round(2.5,MidpointRounding.AwayFromZero) // renvoie 3

    Concernant votre implémentation spécifique consistant à prendre l'entier supérieur si on dépasse 0.5 au niveau des décimales et arrondir à 0.5 en dessous, voici ce que je ferais :

    namespace MyApplication
    {
        public static class MyConversion
        {
            public static double SpecificRound(this double number)
            {
                //  Nombre sans la virgule
                double nb = Math.Truncate(number);
    
                // On obtient la valeur après la virgule
                double deci = number - Math.Truncate(nb);
    
                if (deci <= 0.5)
                    return nb + 0.5;
                else
                    return nb + 1;
    
            }
        }
    
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>     
            static void Main()
            {
    
                System.Diagnostics.Debug.WriteLine(2.56.SpecificRound()); //Retourne 3
                System.Diagnostics.Debug.WriteLine(2.15.SpecificRound()); //Retourne 2.5
    
                double n = 1.14;
                System.Diagnostics.Debug.WriteLine(n.SpecificRound()); //Retourne 1.5
    
                n = 1.74;
                System.Diagnostics.Debug.WriteLine(n.SpecificRound()); //Retourne 2
            }
        }
    }
    

    • Marqué comme réponse SIMONGEORGES vendredi 3 juillet 2015 08:54
    jeudi 2 juillet 2015 14:41