Comment arrondir les valeurs à l'entier le plus proche?
Par exemple:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" ne m'aide pas. Des idées?
Comment arrondir les valeurs à l'entier le plus proche?
Par exemple:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" ne m'aide pas. Des idées?
Réponses:
Consultez la documentation officielle pour en savoir plus. Par exemple:
En gros, vous donnez à la Math.Round
méthode trois paramètres.
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 en avez besoin MidpointRounding.AwayFromZero
si vous voulez qu'une valeur de .5 soit arrondie. Malheureusement, ce n'est pas le comportement par défaut pour Math.Round()
. Si vous utilisez MidpointRounding.ToEven
(valeur par défaut), la valeur est arrondie au nombre pair le plus proche ( 1.5
est arrondie à 2
, mais 2.5
est également arrondie à 2
).
away from zero
signifie également que -1.5
sera arrondi à -2
.
Vous avez besoin Math.Round
, non Math.Ceiling
. Ceiling
"arrondit" toujours vers le haut, tandis que les Round
arrondis vers le haut ou vers le bas selon la valeur après la virgule décimale.
il y a ce manuel, et assez 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 transtypez-le en int (ou plancher) et il sera mathématiquement arrondi correctement: D
Vous pouvez utiliser Math.Round comme d'autres l'ont suggéré (recommandé), ou vous pouvez ajouter 0,5 et convertir en un entier (ce qui supprimera 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.
1.5
de la valeur? Vous avez besoin de plus de paramètres.
Je cherchais ceci, mais mon exemple était de prendre un nombre, tel que 4.2769 et de le déposer dans une plage de 4,3. Pas exactement la même chose, 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)
var roundedVal = Math.Round(2.5, 0);
Cela donnera le résultat:
var roundedVal = 3
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, "numr" et "denr" sont des entiers non signés.
En utilisant des Math.Round(number)
arrondis au nombre entier le plus proche.
Écrivez votre propre méthode ronde. Quelque chose comme,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end