Divisão de inteiros em VB.net vs. C#
Imaginem a seguinte instrução em VB.net:
Dim x as integer = 5 / 20 * 100
E em C#:
int x = 5 / 20 * 100;
Seria de esperar que ambas atribuíssem o mesmo resultado a x, no entanto verifica-se que em VB.net é atribuído a x o valor esperado de 25, mas em C#, x fica com o valor zero.
A diferença de resultados resulta do C# reduzir de imediato o resultado da divisão 5 / 20 a um inteiro, de onde resulta o valor 0 que absorve a multiplicação por 100.
Se mudarmos em C# para:
int x = 5M / 20M * 100;
int y = 5 / 20M * 100;
int z = 5M / 20 * 100;
Qualquer uma das variáveis x, y e z fica com o valor 25. Da mesma forma, no seguinte caso…
int a = 5;
int b = 20;
int c = a / b * 100;
…c fica de novo com o valor zero, será necessário algo como…
int c = (int)((decimal)a / b * 100);
…para que c fique com o valor esperado de 25.
Mais do que alimentar guerras VB.net/C#, espero que este post sirva para alertar deste comportamento que não podemos classificar de incorrecto por parte do C# mas que pode provocar resultados inesperados e nem sempre fáceis de detectar…