2010-12-03 13 views
12

VB.NETの除算で/\の違いは何ですか?VB.NETでの除算

私のコードは、私が使っているものによって非常に異なる答えを与えます。私は前に両方見たことがあるが、私はその違いを知らなかった。

答えて

16

番号を分割するには、2つの方法があります。速い道と遅い道。コンパイラの多くは、あなたを高速化するためにあなたを騙そうとします。 C#は、それらの一つであり、これを試してみてください。

using System; 

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

出力:0

をあなたはその結果に満足していますか?式の左辺と右辺が整数である場合は、技術的に正しい、文書化された動作です。それは速い整数部を行います。 (有名な)FDIV命令ではなく、プロセッサ上のIDIV命令。すべての中括弧言語がどのように機能するかにも完全に一致します。しかし、間違いなくSOの重要な情報源となっています。幸せな結果を得るために、あなたがこのような何かをしなければならないでしょう:

Console.WriteLine(1.0/2); 

出力:0.5

左側が浮動小数点除算を強制的に、今の二重です。計算機に表示される結果の種類。 FDIVを呼び出すその他の方法は、右側を浮動小数点数にするか、オペランドの1つを明示的に(double)にキャストすることです。

VB.NETはそのように動作しません。/演算子は、常に浮動小数点の除算で、型に関係なくです。時にはあなたは本当にを実行します。は整数除算が必要です。それは\の機能です。上記のため

+0

あなたが持ってきた興味深いポイント。私はいつもVBの/と\の違いを理解していましたが、何らかの理由でこれがデータ型を指定する作業をC言語で行うことは決してありませんでした。私は戻って、私の数字の最後からすべてのDとFを取り除くことができると思います。 =) – AndyPerfect

5
/ Division 
\ Integer Division 
+0

いくつかの精緻化が順序であるかもしれません。 –

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 

コード:

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)