locked
Trabajar y Calcular con Integeres que tienen Decimales RRS feed

  • Pregunta

  • Hola a todos.

    Estoy trabajando en una aplicación WinForms en VS2010 con C# y me gustaría saber como puedo trabajar con una operación que da como resultado Decimales, para a posteriori poder hacer comparativas con límite superior e inferior, es decir:

    A partir por ejemplo de una división de "14/5" cuyo resultado es "2,8", en donde los valores 14 y 5 los tengo guardados en variables "int", me gustaría poder comparar por ejemplo si el resultado está entre "2,0" y "2,4" le aplicaré al resultado "2", y si el resultado está entre "2,5" y 2,9" le aplicaré al resultado "3".

    Quizás lo más coherente sería trabajar con dos decimales y hacer la comprobación a partir de "2,00" y "2,45" para indicar "2", ...

    Y también tengo la duda de como hacerlo internacionalizable por el tema de los decimales con coma y con punto.

    Si alguien tiene algún ejemplo se lo agradezco de antemano.

    Saludos.
    viernes, 26 de julio de 2013 17:40

Respuestas

  • Ojo, que al dividir dos ints en C# el resultado siempre es int. Por lo tanto 14/5 siempre da el resultado 2. Para evitarlo, hay que convertir en flotante uno de los dos datos:

    double resultado = ((double)14)/5;

    Eso sí que te da 2,8. Después ya puedes comparar ese resultado como querías, o usar sobre él la función Math.Round como sugería Leandro.

    • Marcado como respuesta Joanca sábado, 27 de julio de 2013 7:18
    viernes, 26 de julio de 2013 19:38
    Moderador
  • Hola , espero haberte entendido .

    entonces tu necesitas una metodo que te devuelva la parte decimal de cualquier numero en forma de entero

    decimal a = (decimal)3.75;
                int b = (int)((a - (int)Math.Truncate(a)) * 100);

    donde a es una variable decimal, que podria ser el resultado de cualquier division de decimales

    la segunda linea lo que hace es truncar la parte entera y luego restarla de la decimal, ahi obtenemos la parte decimal, pero para convertirla a entero la multiplicamos por 100 y listo, obtenemos la parte decimal como un entero y puedes trabajarla como quieres

    Saludos

    • Propuesto como respuesta Rodrigo J. Rodriguez viernes, 26 de julio de 2013 21:57
    • Marcado como respuesta Joanca sábado, 27 de julio de 2013 7:18
    viernes, 26 de julio de 2013 21:42

Todas las respuestas

  • si el resultado está entre "2,0" y "2,4" le aplicaré al resultado "2", y si el resultado está entre "2,5" y 2,9" le aplicaré al resultado "3".

    podrias usar el

    decimal result = Math.Round(valor);

    este ya redondea como lo planteas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    viernes, 26 de julio de 2013 18:49
  • Ojo, que al dividir dos ints en C# el resultado siempre es int. Por lo tanto 14/5 siempre da el resultado 2. Para evitarlo, hay que convertir en flotante uno de los dos datos:

    double resultado = ((double)14)/5;

    Eso sí que te da 2,8. Después ya puedes comparar ese resultado como querías, o usar sobre él la función Math.Round como sugería Leandro.

    • Marcado como respuesta Joanca sábado, 27 de julio de 2013 7:18
    viernes, 26 de julio de 2013 19:38
    Moderador
  • Hola Alberto y Leandro.

    Ante todo gracias por atenderme.

    Efectivamente el "double pp = (double)14/5;" si lo muestro con un MessageBox.Show(pp.ToString()); se visualiza "2,8".

    Ahora la pregunta es como puedo conseguir tener los dos decimales para conseguir "2,83" o lo que proceda.

    Gracias de antemano.

    Saludos.

    viernes, 26 de julio de 2013 19:52
  • Hola

    Joanca si quieres obtener 2.83 tendrás que dividir (double)14.15/5; porque la operacion que estas haciendo solo tiene como resultado 2.8

    Pero si lo que deseas es mostrar una cantidad fija de decimales puedes hacer:

    MessageBox.Show(pp.ToString("N2"));

    y de esa manera se muestra con 2 lugares despues de la coma... 

    Saludos

    viernes, 26 de julio de 2013 20:28
  • Hola Cruznick y ante todo gracias.

    Tienes razón en que el resultado te da siempre "2,8".  Yo sólo indicaba "2,83" como ejemplo de cualquier otra división para poder explicar la necesidad de trabajar con dos decimales.

    El ToString("N2") veo que funciona OK, pero en realidad lo que necesito es poder trabajar con los dos decimales más que mostrarlos, es decir, poder hacer comparaciones de "variable > 2,80 AND variable < 2,84".

    E incluso yendo más allá lo ideal para mi sería hacer dicha comprobación solamente con la parte decimal extrayendo los dos decimales de la parte Entera, y comparando "valor > ,80 AND valor < ,84" ya que a la postre una vez podrá ser 2 como en el ejemplo, otra 5 u otra 45.

    Gracias de antemano.

    Saludos.

    viernes, 26 de julio de 2013 20:40
  • Hola , espero haberte entendido .

    entonces tu necesitas una metodo que te devuelva la parte decimal de cualquier numero en forma de entero

    decimal a = (decimal)3.75;
                int b = (int)((a - (int)Math.Truncate(a)) * 100);

    donde a es una variable decimal, que podria ser el resultado de cualquier division de decimales

    la segunda linea lo que hace es truncar la parte entera y luego restarla de la decimal, ahi obtenemos la parte decimal, pero para convertirla a entero la multiplicamos por 100 y listo, obtenemos la parte decimal como un entero y puedes trabajarla como quieres

    Saludos

    • Propuesto como respuesta Rodrigo J. Rodriguez viernes, 26 de julio de 2013 21:57
    • Marcado como respuesta Joanca sábado, 27 de julio de 2013 7:18
    viernes, 26 de julio de 2013 21:42