2010-12-03 11 views
12

Was ist der Unterschied zwischen / und \ für die Teilung in VB.NET?Division in VB.NET

Mein Code gibt sehr unterschiedliche Antworten, je nachdem, was ich verwende. Ich habe beide vorher gesehen, aber ich wusste den Unterschied nie.

Antwort

16

Es gibt zwei Möglichkeiten Zahlen zu teilen. Der schnelle Weg und der langsame Weg. Viele Compiler versuchen, Sie dazu zu bringen, es schnell zu machen. C# ist einer von ihnen, versuchen Sie dies:

using System; 

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

Ausgang: 0

Sind Sie zufrieden mit dem Ergebnis? Es ist ein technisch korrektes, dokumentiertes Verhalten, wenn die linke Seite und die rechte Seite des Ausdrucks Ganzzahlen sind. Das macht eine schnelle ganzzahlige Division. Der IDIV-Befehl auf dem Prozessor anstelle des (berüchtigten) FDIV-Befehls. Ganz im Einklang mit der Funktionsweise aller geschweiften Klammersprachen. Aber definitiv eine große Quelle von "wtf passiert" Fragen bei SO. Um den glücklichen Ausgang zu bekommen würden Sie haben, so etwas zu tun:

Console.WriteLine(1.0/2); 

Ausgang: 0,5

Die linke Seite ist jetzt eine doppelte, eine Gleitkomma-Division zwingen. Mit der Art von Ergebnis zeigt Ihr Rechner. FDIV kann auch auf der rechten Seite durch eine Fließkommazahl oder durch explizites Umwandeln eines der Operanden auf (double) aufgerufen werden.

VB.NET funktioniert nicht so, der Operator/ist immer eine Gleitkommadivision, unabhängig von den Typen. Manchmal haben Sie wirklich tun wollen eine ganzzahlige Division. Das macht \.

+0

Interessanter Punkt, den Sie erzogen haben. Ich habe immer den Unterschied zwischen/und \ in VB verstanden, aber es ist mir nie in den Sinn gekommen, dass dies die Arbeit macht, die das Spezifizieren von Datentypen in C-Sprachen leistet. Ich denke, ich kann jetzt zurückgehen und alle D und F am Ende meiner Nummern entfernen. =) – AndyPerfect

5
/ Division 
\ Integer Division 
+0

Einige Ausarbeitung, um sein könnte. –

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 für die oben:

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)