2010-12-03 3 views
12

Quelle est la différence entre / et \ pour la division dans VB.NET?Division dans VB.NET

Mon code donne des réponses très différentes selon ce que j'utilise. J'ai déjà vu les deux, mais je n'ai jamais su la différence.

Répondre

16

Il y a deux façons de diviser des nombres. La voie rapide et la voie lente. Beaucoup de compilateurs essaient de vous tromper pour le faire rapidement. C# est l'un d'entre eux, essayez ceci:

using System; 

class Program { 
    static void Main(string[] args) { 
     Console.WriteLine(1/2); 
     Console.ReadLine(); 
    } 
} 

Sortie: 0

Êtes-vous satisfait de ce résultat? C'est un comportement techniquement correct et documenté lorsque le côté gauche et le côté droit de l'expression sont des entiers. Cela fait un division entière rapide. L'instruction IDIV sur le processeur, au lieu de l'instruction (infâme) FDIV. En outre entièrement compatible avec la façon dont toutes les langues accolades bouclent. Mais certainement une source majeure de "wtf s'est produit" des questions à SO. Pour obtenir le résultat heureux que vous auriez à faire quelque chose comme ceci:

Console.WriteLine(1.0/2); 

sortie: 0,5

Le côté gauche est maintenant un double, ce qui oblige une division à virgule flottante. Avec le type de résultat affiché par votre calculatrice. D'autres manières d'invoquer FDIV consistent à faire du côté droit un nombre à virgule flottante ou à convertir explicitement l'un des opérandes en (double).

VB.NET ne fonctionne pas de cette façon, l'opérateur/est toujours une division en virgule flottante, quels que soient les types. Parfois, vous voulez vraiment une division entière. C'est ce que fait le \.

+0

Point intéressant que vous avez évoqué. J'ai toujours compris la différence entre/et \ dans VB, mais cela ne m'a jamais traversé l'esprit, pour une raison quelconque, que de faire le travail en spécifiant les types de données dans les langages C. Je suppose que je peux revenir en arrière et enlever tous les D et F de la fin de mes numéros maintenant. =) – AndyPerfect

5
/ Division 
\ Integer Division 
+0

Certains élaboration pourrait être dans l'ordre. –

9
10/3 = 3.333 
10 \ 3 = 3 (the remainder is ignored) 
0
10/3 = 3.33333333333333, assigned to integer = 3 
10 \ 3 = 3, assigned to integer = 3 
20/3 = 6.66666666666667, assigned to integer = 7 
20 \ 3 = 6, assigned to integer = 6 

Code pour ce qui précède:

Dim a, b, c, d As Integer 
a = 10/3 
b = 10 \ 3 
c = 20/3 
d = 20 \ 3 

Debug.WriteLine("10/3 = " & 10/3 & ", assigned to integer = " & a) 
Debug.WriteLine("10 \ 3 = " & 10 \ 3 & ", assigned to integer = " & b) 
Debug.WriteLine("20/3 = " & 20/3 & ", assigned to integer = " & c) 
Debug.WriteLine("20 \ 3 = " & 20 \ 3 & ", assigned to integer = " & d)