none
Problemas con decimal

    Pregunta

  • Buenas tardes a todos. Bueno, tengo el siguiente problema. 

    Tengo la siguiente línea de código.

    int dif = 16;
    string res = Convert.ToDecimal(dif / 1000).ToString();
    

    si yo divido 16 sobre 1000, el resultado debería ser 0.016 pero el valor de res queda en 0 (cero). 

    Por que puede estar pasando esto? No he trabajado con decimales es por eso que no entiendo por que el valor es cero.

    Espero me puedan ayudar.

    Muchas gracias.

    Saludos

    martes, 7 de agosto de 2018 20:12

Respuestas

  • Si dif es necesariamente un int, entonces la expresión debe escribirse de otro modo. Por ejemplo

    string res = Convert.ToDecimal((double)dif / 1000).ToString();
    
    string res = (dif / 1000M).ToString();
    
    string res = Convert.ToDecimal(dif / 1000.0).ToString();

    dif / 1000 es cero. Es una división entera. El resultado es un entero. Primero resuelves la división: cero. Luego conviertes a decimal el cero: cero.



    martes, 7 de agosto de 2018 20:22

Todas las respuestas

  • Si dif es necesariamente un int, entonces la expresión debe escribirse de otro modo. Por ejemplo

    string res = Convert.ToDecimal((double)dif / 1000).ToString();
    
    string res = (dif / 1000M).ToString();
    
    string res = Convert.ToDecimal(dif / 1000.0).ToString();

    dif / 1000 es cero. Es una división entera. El resultado es un entero. Primero resuelves la división: cero. Luego conviertes a decimal el cero: cero.



    martes, 7 de agosto de 2018 20:22
  • hola

    que pasa si usas

    string res = Convert.ToDecimal(dif / (decimal)1000).ToString();

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de agosto de 2018 20:22
  • Hola. Tu respuesta fue muy acertiva y útil. Gracias. 

    Saludos

    martes, 7 de agosto de 2018 20:27
  • El lema es, si no eres asertivo cierra el pico. Aunque también no está mal ser acertado.
    martes, 7 de agosto de 2018 20:34