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?
Voir le documentation officielle pour plus. Par exemple:
En gros, vous donnez trois paramètres à la méthode Math.Round
.
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
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
).
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
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.
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
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
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
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.
var roundedVal = Math.Round(2.5, 0);
Cela donnera le résultat:
var roundedVal = 3
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...
Utilisez Math.Round
:
double roundedValue = Math.Round(value, 0)
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);
}
É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
Utiliser Math.Round(number)
arrondit au nombre entier le plus proche.
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.