¿Cómo puedo redondear los valores al número entero más cercano?
Por ejemplo:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" no me ayuda. ¿Algunas ideas?
¿Cómo puedo redondear los valores al número entero más cercano?
Por ejemplo:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" no me ayuda. ¿Algunas ideas?
Respuestas:
Consulte la documentación oficial para obtener más información. Por ejemplo:
Básicamente le das al Math.Round
método tres parámetros.
Código de muestra:
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
Necesita MidpointRounding.AwayFromZero
si desea redondear un valor de .5. Desafortunadamente, este no es el comportamiento predeterminado de Math.Round()
. Si utiliza MidpointRounding.ToEven
(el valor predeterminado), el valor se redondea al número par más cercano ( 1.5
se redondea a 2
, pero 2.5
también se redondea a 2
).
away from zero
también significa que -1.5
redondeará a -2
.
Math.Ceiling
siempre redondea (hacia el techo)
Math.Floor
siempre redondea hacia abajo (hacia el suelo)
lo que buscas es simplemente
Math.Round
que rondas según esta publicación
Necesitas Math.Round
, no Math.Ceiling
. Ceiling
siempre "redondea" hacia arriba, mientras que Round
redondea hacia arriba o hacia abajo según el valor después del punto decimal.
hay este manual, y también una forma un poco linda:
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);
simplemente agregue 0.5 a cualquier número, y échelo a int (o al piso) y se redondeará matemáticamente correctamente: D
Tienes la función Math.Round que hace exactamente lo que quieres.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
1.5
con el valor? Necesita más parámetros.
Estaba buscando esto, pero mi ejemplo fue tomar un número, como 4.2769 y colocarlo en un intervalo como solo 4.3. No es exactamente lo mismo, pero si esto ayuda:
Model.Statistics.AverageReview <= it's just a double from the model
Luego:
@Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28
etc ...
Utilizar Math.Round
:
double roundedValue = Math.Round(value, 0)
var roundedVal = Math.Round(2.5, 0);
Dará resultado:
var roundedVal = 3
Si trabaja con números enteros en lugar de números de punto flotante, este es el camino.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
Aquí tanto "numr" como "denr" son enteros sin signo.
Usar Math.Round(number)
redondea al número entero más cercano.
Escribe tu propio método circular. Algo como,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end