VB.NET vs c # division entière [dupliquer]

cette question a déjà une réponse ici:

Quelqu'un peut expliquer pourquoi ces deux morceaux de code montrent des résultats différents?

VB.NET v4.0

Dim p As Integer = 16
Dim i As Integer = 10
Dim y As Integer = p / i
//Result: 2

c# v4.0

int p = 16;
int i = 10;
int y = p / i;
//Result: 1
80
demandé sur BoltClock 2011-05-16 09:49:02

5 réponses

quand vous regardez le code IL que ces deux bribes produisent, vous réaliserez que VB.NET d'abord convertit les valeurs entières en doubles, applique la division et fait le tour du résultat avant qu'il ne soit converti en int32 et stocké en Y.

C# ne fait rien de tout cela.

VB.NET Code IL:

IL_0000:  ldc.i4.s    10 
IL_0002:  stloc.1     
IL_0003:  ldc.i4.s    0A 
IL_0005:  stloc.0     
IL_0006:  ldloc.1     
IL_0007:  conv.r8     
IL_0008:  ldloc.0     
IL_0009:  conv.r8     
IL_000A:  div         
IL_000B:  call        System.Math.Round
IL_0010:  conv.ovf.i4 
IL_0011:  stloc.2     
IL_0012:  ldloc.2     
IL_0013:  call        System.Console.WriteLine

Code C# IL:

IL_0000:  ldc.i4.s    10 
IL_0002:  stloc.0     
IL_0003:  ldc.i4.s    0A 
IL_0005:  stloc.1     
IL_0006:  ldloc.0     
IL_0007:  ldloc.1     
IL_0008:  div         
IL_0009:  stloc.2     
IL_000A:  ldloc.2     
IL_000B:  call        System.Console.WriteLine

la division entière "correcte" dans VB a besoin d'une barre oblique à l'envers: p \ i

82
répondu Christian 2013-10-09 15:05:28

En VB, à faire integer division, la barre oblique inverse:

Dim y As Integer = p \ i

sinon, il est élargi à un point flottant pour la division, puis forcé de revenir à un int après avoir arrondi quand il est assigné à y .

78
répondu Marc Gravell 2011-05-16 05:53:59

VB.NET opérateur de division entière est \ , pas / .

16
répondu Oded 2011-05-16 05:54:15

"la Division est effectuée différemment en C# et VB. C#, comme d'autres langages basés sur C tronque le résultat de division lorsque les deux opérandes sont des entiers littéraux ou des variables entières (ou des constantes entières). Dans VB, vous devez utiliser l'opérateur de division entier ( \ ) pour obtenir un résultat similaire."

Source

8
répondu lance 2011-05-16 05:54:40

En C#, de la division entière est appliquée avec / lorsque le numérateur et le denomenator sont des nombres entiers. Considérant que, dans VB.Net ' / 'résulte en divsion flottante de point, donc pour la division entière dans VB.Net utilisez \ . Regardez ce MSDN post .

-4
répondu FIre Panda 2011-05-16 10:42:28