web-dev-qa-db-fra.com

Comment arrondir au nombre entier le plus proche en C #

Comment puis-je arrondir des valeurs comme celle-ci:

1.1 => 1
1.5 => 2
1.9 => 2

Math.Ceiling() ne m'aide pas. Des idées?

76
SOF User

Voir le documentation officielle pour plus. Par exemple:

En gros, vous donnez trois paramètres à la méthode Math.Round.

  1. La valeur que vous voulez arrondir.
  2. Le nombre de décimales que vous souhaitez conserver après la valeur.
  3. Un paramètre facultatif que vous pouvez appeler pour utiliser l'arrondi AwayFromZero. (ignoré sauf si l'arrondi est ambigu, par exemple 1,5)

Exemple de code:

var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3

Démo en direct

Vous avez besoin de MidpointRounding.AwayFromZero si vous voulez arrondir la valeur .5. Malheureusement, ce n'est pas le comportement par défaut pour Math.Round(). Si vous utilisez MidpointRounding.ToEven (par défaut), la valeur est arrondie au chiffre même le plus proche (1.5 est arrondi à 2, mais 2.5 est également arrondi à 2).

172
Only Bolivian Here
Math.Ceiling

toujours arrondi vers le plafond

Math.Floor

toujours arrondi vers le sol

ce que vous cherchez, c'est simplement 

Math.Round

qui arrondit selon ce post

57
devrooms

Vous avez besoin de Math.Round, pas Math.Ceiling. Ceiling "arrondit" toujours vers le haut, alors que Round arrondit vers le haut ou le bas en fonction de la valeur après le point décimal.

6
dasblinkenlight

il y a ce manuel, et un peu mignon aussi:

double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;

int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);

ajoutez simplement 0,5 à n’importe quel nombre, et lancez-le sur int (ou le plancher) et il sera mathématiquement correctement arrondi: D

6
davogotland

Juste un rappel. Attention au double. 

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2
5
Kosmas

Vous pouvez utiliser Math.Round comme suggéré par d'autres (recommandé) ou ajouter 0,5 et transtyper un int (ce qui supprime la partie décimale).

double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1

double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
4
Marlon

Vous avez la fonction Math.Round qui fait exactement ce que vous voulez.

Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
3
user496607
var roundedVal = Math.Round(2.5, 0);

Cela donnera le résultat:

var roundedVal = 3
1
Ankita_systematix

Je cherchais cela, mais mon exemple était de prendre un nombre, tel que 4,2769 et de le laisser tomber dans un intervalle de 4,3. Pas exactement pareil, mais si cela aide:

Model.Statistics.AverageReview   <= it's just a double from the model

Ensuite:

@Model.Statistics.AverageReview.ToString("n1")   <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2")   <=gives me 4.28

etc...

1
user2970629

Utilisez Math.Round :

double roundedValue = Math.Round(value, 0)
1
Thomas Levesque

cela arrondira au 5 le plus proche ou ne changera pas s'il est déjà divisible par 5

public static double R(double x)
{
    // markup to nearest 5
    return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}
1
rick

Écrivez votre propre méthode de ronde. Quelque chose comme,

function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end

0
Sandeep Anand

Utiliser Math.Round(number) arrondit au nombre entier le plus proche.

0
John Kennedy

Si vous travaillez avec des nombres entiers plutôt que des nombres à virgule flottante, voici le chemin.

#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))

Ici, les deux "numr" et "denr" sont des entiers non signés.

0
Sarath Kumar