locked
Diferencias del operador / según VB.NET y C# RRS feed

  • Pregunta

  • NO hay un mismo comportamiento para el operador / según VB.NET y C#.

    Problemas en migración de código de VB.NET a C#

    En VB.NET
    (35 / 2712 )* 100 = 1.2905604719764012

    regCB = IIf(IsDBNull(valor), 0, valor)   
    tRegCB = tRegCB + regCB                
    calc = (regCB / regCargados) * 100                
    porCB = Math.Round(calc, 2) & "%"



    En C#
    (35 / 2712 ) = 0

     regCB = Convert.IsDBNull(valor) ? 0 : Convert.ToInt32(valor); 
                   tRegCB = (tRegCB + regCB);  
                  calc = (regCB / regCargados) * 100;   
                 porCB = Math.Round(calc, 2) + "%";

    miércoles, 25 de marzo de 2020 12:09

Respuestas

Todas las respuestas

  • hola

    Es una buena practica definir los tipos de datos

    Que valor tiene la variable tRegCB ? porque la sumas a regCB pero no se conoce previamente que tiene asignado

    Tampoco de donde sale regCargados?

    Intenta indicando que estas operando con tipos de datos decimales

    int regCB = 35;
    int regCargados = 2712;
    decimal calc = (regCB / (decimal)regCargados) * 100;

    string porCB = Math.Round(calc, 2) + "%";


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 25 de marzo de 2020 13:27
  • En VB.NET y C#

    regCB y regCargardos son integer - int

    cal es double

    Jose: "El problema se da porque el compilador de C# determina que los operandos de la división son de tipo entero y por lo tanto decide que la operación será la "división entera". En contraste, si los operandos son declarados (solución #1) o convertidos (solución #2) al tipo de datos de punto flotante double entonces el compilador de C# decide que la operación será una división de punto flotante. Como debe haber adivinado, la división entera arroja enteros; la división de punto flotante arroja un valor de punto flotante."

    double numero1 = 9;
             double numero2 = 2;
             double total = (numero1 / numero2);

         int numero1 = 9;
             int numero2 = 2;
             double total = ((double)numero1 / (double)numero2);


    miércoles, 25 de marzo de 2020 15:29
  • Alguna librería "matemática" que facilite esos cálculos ?
    jueves, 26 de marzo de 2020 10:05