Divisão de inteiros em VB.net vs. C#

Published Tue, Jul 10 2012 17:58 | Alberto Silva

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…

Comments

# Luis Abreu said on October 9, 2012 2:47 PM:

So dava o mm resultado se usasses o mesmo operador nos 2 casos :)

Em VB.NET (bah:p), e se n estou enganado, / efetua uma divisao e devolve ujm floating point. Para teres o mesmo resultado que tiveste em C# (resultado esse que, claro esta, e o correto :p), devias usar o operador \.

Leave a Comment

Name:  
Website:
If you can't read this number refresh your screen
Enter the numbers above:  

Search

This Blog

Tags

Community

Archives

News

  • Você escolheu um software de gestão que se adapta ao seu negócio... Porque há-de deixar que lhe imponham uma solução de mobilidade para as suas forças de venda? Contacte a moving2u e teremos todo o prazer em lhe apresentar as nossas soluções!


    Grab this badge here!

Eventos

Desenvolvimento .net CF

Mobilidade em Português...

Sobre mim...

Syndication

Email Notifications