round - ¿Cómo redondear el valor C#al entero más cercano?
redondear hacia arriba en c (7)
C # usa el redondeo Math.Round
en Math.Round
en forma predeterminada. Deberías usar esta sobrecarga:
Math.Round(0.5d, MidpointRounding.AwayFromZero) //1
Math.Round(0.4d, MidpointRounding.AwayFromZero) //0
Quiero redondear doble a int.
P.ej,
double a=0.4, b=0.5;
Quiero cambiarlos a ambos enteros.
así que eso
int aa=0, bb=1;
aa
es de a
y bb
es de b
.
¿Alguna fórmula para hacer eso?
Echa un vistazo a Math.Round . A continuación, puede convertir el resultado a un int
.
Es simple. Así que sigue este código.
decimal d = 10.5;
int roundNumber = (int)Math.Floor(d + 0.5);
El resultado es 11
Math.Round (0.5) devuelve cero debido a errores de redondeo de punto flotante, por lo que deberá agregar una cantidad de error de redondeo al valor original para asegurarse de que no se redondee hacia abajo, por ejemplo.
Console.WriteLine(Math.Round(0.5, 0).ToString()); // outputs 0 (!!)
Console.WriteLine(Math.Round(1.5, 0).ToString()); // outputs 2
Console.WriteLine(Math.Round(0.5 + 0.00000001, 0).ToString()); // outputs 1
Console.WriteLine(Math.Round(1.5 + 0.00000001, 0).ToString()); // outputs 2
Console.ReadKey();
Usa Math.Ceiling
para redondear
Math.Ceiling(0.5); // 1
Usa Math.Round
para redondear solo
Math.Round(0.5, MidpointRounding.AwayFromZero); // 1
Y Math.Floor
para redondear hacia abajo.
Math.Floor(0.5); // 0
Use una función en lugar de MidpointRounding.AwayFromZero
:
myRound(1.11125,4)
Respuesta: - 1.1114
public static Double myRound(Double Value, int places = 1000)
{
Double myvalue = (Double)Value;
if (places == 1000)
{
if (myvalue - (int)myvalue == 0.5)
{
myvalue = myvalue + 0.1;
return (Double)Math.Round(myvalue);
}
return (Double)Math.Round(myvalue);
places = myvalue.ToString().Substring(myvalue.ToString().IndexOf(".") + 1).Length - 1;
} if ((myvalue * Math.Pow(10, places)) - (int)(myvalue * Math.Pow(10, places)) > 0.49)
{
myvalue = (myvalue * Math.Pow(10, places + 1)) + 1;
myvalue = (myvalue / Math.Pow(10, places + 1));
}
return (Double)Math.Round(myvalue, places);
}
Redondea un valor de coma flotante de precisión doble al valor integral más cercano.