2 votes

fonction round dans c #

   public static decimal Round(
decimal d,
int decimals
    )

Le paramètre décimales spécifie le nombre de chiffres fractionnaires dans la valeur de retour et va de 0 à 28. Si décimales est égal à zéro, un entier est renvoyé.

Si la valeur du premier chiffre de d à droite de la position décimale est 5, le chiffre dans la position décimale est arrondi vers le haut s'il est impair, ou laissé inchangé s'il est pair. Si la précision de d est inférieure aux décimales, d est retourné inchangé.

    Math.Round(3.44, 1); //Returns 3.4.
   Math.Round(3.45, 1); //Returns 3.4.

Pourquoi la version 3.45 renvoie la version 3.4. Je ne comprends pas cette sortie, quelqu'un peut-il m'aider ?

4voto

Amittai Shapira Points 2101

Vous pouvez modifier ce comportement en utilisant la surcharge Round qui prend l'attribut MidpointRounding de MSDN :

ToEven (par défaut, AKA Bankers Rounding) Lorsqu'un nombre se trouve à mi-chemin entre deux autres, il est arrondi au nombre pair le plus proche.
AwayFromZero Lorsqu'un nombre se trouve à mi-chemin entre deux autres, il est arrondi au nombre le plus proche qui est éloigné de zéro.

1voto

Jodaka Points 1207

Comme tu l'as dit,

Si la valeur du premier chiffre dans d à droite de la position décimale est 5, le chiffre dans la position décimale est arrondi vers le haut s'il est impair, ou laissé inchangé s'il est pair.

Avec 3,45, le premier chiffre à droite de la décimale est 5, et comme 4 est pair, il est laissé inchangé. Il s'agit d'une façon assez standard d'arrondir, car si 5 est toujours arrondi vers le haut, cela peut pondérer des choses comme des moyennes et des sommes plus élevées qu'elles ne devraient l'être.

0voto

paxdiablo Points 341644

L'arrondi par défaut est MidpointRounding.ToEven (arrondi du banquier), ce qui signifie qu'il gravitera vers un nombre pair pour le chiffre à l'endroit de l'arrondi (c'est-à-dire qu'il se déplacera vers 3,4 parce que 4 est pair).

Ceci a pour but de minimiser l'accumulation d'erreurs qui peuvent se produire lorsque tous les arrondis du point médian vont dans la même direction (bien que cela dépende bien sûr de vos données d'entrée - un mélange égal de nombres positifs et négatifs peut convenir à l'utilisation de l'algorithme d'arrondi). AwayFromZero ).

Donc vous avez :

Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4 (down towards 4).
Math.Round(3.54, 1); //Returns 3.5.
Math.Round(3.55, 1); //Returns 3.6 (up towards 6).

Voir cette réponse pour une explication détaillée de toutes les options qui s'offrent à vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X