ayuda

#1
me podrian ayudar, estoy haciendo una aplicacion en la cual quiero redondear numero a entero o 0.50
por ejemplo

45.23= 45.00
45.40=45.50
45.70=45.50
45.80=46.00

es en c#
 

Salandrews

Bovino maduro
#3
El redondeo no funciona como lo planteas, así que no podrás usar la función round que poseen la mayoría de lenguajes.
Si lo que te piden es el redondeo como tal, primero debes estudiar los conceptos básicos de cifras significativas, y luego las reglas del redondeo. En resumen tu ejemplo debería quedar así:

45.23= 45.00
45.40=45.00

45.70=46.00
45.80=46.00

Si lo que te piden es ese "redondeo" que muestras en el ejemplo, puedes tomar la idea que te dan arriba, comparando lo que viene después del punto en un switch, pero debes tener claro cuales serán los criterios para determinar cuando "redondeas" a 0 o a 0.5. Por ejemplo, ¿45.35 a que lo redondeas? ¿a 45.0 o a 45.5?

Saludos
 
#4
gracias carnalitos encontre una forma de hacerlo ahi les paso el codigo
string input = "25.23";
double sub1,a;
double i;
string sub = input.Substring(input.Length - 3);
string subres = input.Substring(0,input.Length - 2);
a = Convert.ToDouble(sub);
sub1 = Convert.ToDouble(sub);
if (a >= 0 && a <= 0.24)
{
sub1=00;

label1.Text = subres + sub1;
}
else
if (a >= 0.25 && a <= 0.49)
{
sub1 = 50;
label1.Text = subres + sub1;
}
else
if (a >= 0.50 && a <= 0.74)
{
sub1 = 50;
label1.Text = subres + sub1;
}
else
if (a >= 0.75 && a <= 0.99)
{
i = 1.0 - sub1;
i = Convert.ToDouble(input) + i;
label1.Text =i.ToString();

}
 

Salandrews

Bovino maduro
#5
El código que posteaste cumple, pero solo en cierta parte con lo que deseas.

¿Qué pasa con valores como 25.245?

No hará match con ninguna de las condiciones posteadas.

El código también puede ser mejorado. Si te das cuenta, para la segunda y la tercera comparación se ordena la misma instrucción. Podrías optimizarlo así en una sola condición:

if (a >= 0.25 && a <= 0.74)
{
label1.Text = subres + 50;
}

Saludos
 

Zephyros

Bovino de la familia
#6
No es más "limpio" utilizar un switch en lugar de anidar if's?

De hecho sólo necesitas realizar 3 comparaciones para conseguir lo que deseas.
 

Renegado22

Bovino maduro
#7
gracias salan buen punto el que me dijiste y para lo de los dijitos despues del punto siempre es dos porque yo tomo el valor dl textbox y tengo la funcion que solo me ponga dos digitos.
y Zephyros es vdd con el switch si es mas limpio pero no lo eh utlizado mucho por lo que para mi se me hizo mejor el if.
Saludos
 

jlrmdevil

Bovino maduro
#8
Chale... pues depende, la solucion que te dieron es relativamente practica, yo me acuerdo que restaba o sumaba 0.50 y utilizaba la funcion de ceiling() o floor(). No se si c# conserven esas funciones... pero se me hace mas facil que lo que acaban de hacer....
 
Arriba